Úvod EIC&ESB-Globální IT Řešení na míru
EasyITcenter & EasySYSTEMbuiler - Globální Řešení vašeho IT Obecné Informace o Struktuře, vazbách a možnostech tohoto Unikátního Globálnho Řešení Celé oblasti IT až na malinké vyjímky.
Zde budu průběžně zapisovat nápady
Rozcestník IT Universální Řešení EIC & ESB
Celé IT v Jednom Řešení pro Váš Bussines, Firmu,
ESB - SYSTEM DESIGNER - TOUCH SYSTEMS - WEB
Generátor - WebKonfigurátor - Vytvoření LIGHT Klonu
PředObjednávky NA EasySYSTEMbuilder LIGHT za POUHÝCH 10000KČ
Dodání Do 1 Měsíce.
Chystá se Nový LIGHT KLON EasySYSTEMbuilderu
pro účely:
-
Samostatný ANY SYSTEM Designer/APP
-
Dotykové TouchPaNely
-
Provoz Dynamického WebServeru
-
Řeší Vytváření Systémů: WebView v App
-
Řeší Vytváření Webů
-
Řeší Vytváření TouchPanelů
-
Z ESB udělat Light Klienta pro TOTO Řešení
Logika:
- Vytvořit Tabulku Webové Objekty
info URL
seznam ostatních objektu v pořadí
Jak se pospojují do výsledné Stránky
1 Tabulka na celé řešení:
- ID AutoIncrement
- Primární Ano/Ne = Startovací Stránka
bude zobrazena na dotykovém panelu - ServerUrl Adresa kde se spustí
je nepovinná pro ID co jsou jen Objekty - Požadována Autentifikace ROLE - Ano/Anonymous
Když Ano - Přesměrovat+Kam nebo Přeskočit - Html Content (HTML,JS,CSS) - každá část má své potřebné
- Seznam ID následných: umožňuje dynamickou naváznost
- Aktivní
- UserId
- Timestamp
Web Zázemí: Interní Web Server Systému
- Metro4
- 1000+ k Dispozici Knihovny Statických Nástrojů
- JQuery
- SQLite DB s Editorem
- AutoTranslator
Prvni musí být Matice Web Stránky, Ostatní Objekty se
dohrají JQuery objekt.html('')
Vytvořit Zobrazení Schematu Provedení
udelat agendu generatory - tim myslim vygenerovat galerii, dokumentaci atd na ceste v administraci
LOW/NO/FULL code EXTREMELY EASY TO DEVELOP ANY SYSTEM
For thinking, the development of tools and work with them worthy in the 21st century
The development of FRONTEND as an entire IS system as you do not know it - only 3 choices are enough
Logic - everything in the database is a LIST (list of invoices)
-> This may or may not have a DETAIL (list of items)
|| OR it needs to be just settings, i.e. Detail (program settings, video processing, etc.)
And the result can be a system that SAP or anyone else can only dream of.
Almost like tennis, you can publish one table after another, and by evening you have a small system.
DEFINITION OF 3 layer SYSTEM and necessary components
Database - place for DATA
Backend Server - A service that securely conveys data to applications
Frontend/User Application - A nice application to easily work with data
Print support - creation and printing of any reports
START in 1 day you will start your new system in three steps
Development in Golden UNIVERS RESTFULL/SOCKET BACKEND SERVER in three user steps
-
Create any database Table. Use the TemplateList Template
and just insert your boxes into it. Remember Indexes, Foreign Keys, or look at already existing tables or consult with me. It IS for a few minutes -
You export the tables as a model using the prepared CMD command to the BACKEND project
[ EntityFramework 6 ] command: Scaffold-DbContext "Server=IP;Database=DB;User ID=USER;Password=PW;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir DBModel
done - the entire database is defined in the Backend server -
From existing calls, e.g. UserList, copy and rename the new API call for the new table [GET,POST,PUT,PATCH,DELETE]
COPY file -> PASTE file -> Rename to new API for example: /skladList and Build&Run
Done, the API Server is WAITING at http://vaseip/skladList for your call and deployment at the client, in the company, anywhere
Development in EASYBuilder Modern WINDOWS XP+ thin application or system in three user steps
-
You copy the table definition from the model created in the BACKEND project to the FRONTEND project
COPY Class from BE Model -> PASTE into FE application -> add new APIURL -
Select the template you want, there are primarily 3 -> rename it, edit the form and connect it to the MAINMENU
so you set the WHERE to search, COPY/PASTE boxes, write Translation in the dictionary and copy the connection to the MAINMENU
done - the result is a new form with complete user control -
Build&Run - you check the work one after the other, because typos are part of us, aren't they
the full logging option slaps you in detail where the error is or HURRY GOES
Done, the Application is WAITING for your work or deployment at the client, in the company, anywhere
evelopment of Press Reports in FYIREPORTING
-
You simply copy the existing DATALIST/DETAIL report and open it in the editor
Rename to the new name of your table. -
You edit your SQL SELECT and Test it, the parameters are already set ID/SEARCH/CONNECT
Ideally in MSSQLMS or HEIDYSQL or something and debug it there. Remember everything is just a LIST or Detail.
done - and you have the correct data that you just arrange for printing in the form. -
And you import into the system in the REPORTING list menu, where you set the required link to APIURL/SEARCH/ID
Done, the press kit is WAITING for your work or deployment at the client, in the company, anywhere
END OF KNOWLEDGE REQUIRED FOR SYSTEM DEVELOPMENT
Basic listing of almost unlimited skill application
- Prepared with common agendas
- Operation possible on WINDOWS XP, 7, 8, 10, 11
- C# WFP, XAML, Drag&Drop technology
- Complete management of any Agenda (Table) RESTORE/NEW/EDIT/COPY/DELETE
- Automatically generated list data view.
- Easy preparation of the form according to prepared templates and ready made agendas
- more than 100 types of input fields
- Search in content in the data list
- also optimized for TOUCH TERMINALS for MANUFACTURING or BUSINESS, SELF*SERVICE environments
- own printing system with direct printing support
- Almost unlimited development possibilities with the possibility of own involvement
- Support for controlling operating systems
- thousands of already free tools on GitHub
- connection to any third*party services
- support for all known protocols EMAIL, IMAP, HTTPS, FTP, SSH, SMTP, TELNET
- command line support, JavaScript, Telnet
- Option to connect to 3*party systems, IS and OS systems
- Support multimedia, hardware, 3D, devices, RFID readers, QR, BAR, EAN, VIDEO, SOUND, MS OFFICE, PDF, XPS, RTF, etc.
- development of any customized system from 20,000 CZK. System already prepared as a template for any more than just IS SYSTEM
- the possibility of creating any INFORMATION OR CONTROL, MONITORING, REPORTING system, and so on
EASYTOOLS IMPLEMENTED ADD-ONS
- AddOns for touch panels, controls, data types, forms, media, documents, 3D,
- They are completely free to download (including every license pack)
- Open Source community to include more than 1000 tools in the system by community
BUILT SYSTEMS IN 14 DAYS
- LicenseSrv
MultiOS license server with listening API GET/POST server / generation of unlimited static/dynamic CODES and management client - GUIDES Windows XP+ Implementation Production Guides for Production Companies For office / touch panels with unlimited clients and printing options
- ShoPingER Windows XP+ MultiBranch Quotation/Order/Invoicing System with multimedia files supported by unlimited clients and printing capabilities
- LicenceShoper MultiOS License Server PLUS Windows XP+ MultiBranch Billing System [LicenseSrv + ShoPingER]
SOLUTION - WHERE TO FIND COMPLETE INFORMATION
All documentation, license, case study, price list, media, developer information, help, manuals, technology information, installation, images, videos, downloads, etc. can be found here or:
PROJECT IMPLEMENTATION CASE STUDY PROJECTS USING IDEAS
For thinking, the development of tools and work with them worthy in the 21st century
- The first use of this solution was a big change in a manufacturing company For 1000 workers, but it was only four days work for the IT department
- Implementation of production guides as a task for 4 days CZ In Case Studies
- Creation of the Billing System as a replacement for the system with discontinued support.
- Creation of the ShoPingER Invoicing System with a large overlap in 14 days]
- All Windows Applications are available to try online in the Application ShowRoom https://KlikneteZde.Cz
Golden - Backend Server Development Plan
- Create Backend Server Generator
- Create Full Customer Support with Project Managements
EASYBuilder - WPF Fronted System Builder Development Plan
- Publish XAML Generator Graphical Tool with Templates Support
- implement Global Context menu for all DataLists with Count of API record request setting,
Properties of Datalist, DataRequest,DataList Controller - Convert WPF System to WebApplication for Windows/Linux with all graphics and possibilities
- Create SYSTEM Generator
- Create Metro4 Full compatible WEB SYSTEM Variant
- Implement FastReport Tool (Replace FYI Reporting)
Recommended Practices
Using References of Variables or Classes - Maximum Saving Memory Performance
- For All processes which is modified by One Person in One Time - Typical System Using
In simple explanation and absolut ideally working with Data - Maximum Clean Code
Data flow modify one Variable or Class on Way Over More Sequenced Methods
- From API List Logic You working only With Primary API Dataset and few sets of Dials
- For standard Using its best way For Maximum clean code without Exeption
Is calculating that you Have Full or Extended Dataset for API everytime
- Point For Data loading "'SetRecord' Method" - load data from model to Dataset Variable
- Some Operations where you can change data values
- Point For Recapitulate full Dataset and Save
EasyITcenter & EasySYSTEMbuilder VÝVOJOVÝ PLÁN
!!!Unikátní Investiční Příležitost, či Unikátní Globální IT Řešení pro VAŠI FIRMU!!!
9.1.2024 nasazeny Aktuální verze na Domácím PC na vesnici k vyzkoušení
CO BUDE FINÁLNÍ?
- ONLINE GENERÁTOR MultiServeru + BackendAPI + Dynamic API
- ONLINE GENERÁTOR MS SYSTÉMŮ DLE STRUKTURY DB
- BUILDER PRO TOUCHPANELY, BUSINESS PANELY, ANY SYSTEM
- WEB PORTAL s MULTI WEB SERVERS - cokoliv z GITU (React,Php,Electron,Vite,Gulp,..)
- SUBDOMAIN WEBSITES - dá se říct skoro JEDNODOMÉNOVÝ HOSTING
- MULTI IT SERVERS & SOLUTIONS, již nyní s velkým počtem Unikátních Funkcionalit
VÝHLED 2024
LÉTO 2024 -
ONLINE GENERÁTORY - API,MS FORM, WEBFORM(z DB json),
ONLINE Správa klientských Projektů,Build Projektů, Nasazení Změn, Refactor, Stažení Instalátorů
ZIMA 2024 - Průmysl - Implementace Siemens, TouchPanel Builder
Úvod EIC&ESB-Globální IT Řešení na míru
EasyITcenter & EasySYSTEMbuiler - Globální Řešení vašeho IT Obecné Informace o Struktuře, vazbách a možnostech tohoto Unikátního Globálnho Řešení Celé oblasti IT až na malinké vyjímky.
Historie Reklamních Sdělení za Rok 2023 - DOSUD
Hledám práci: IT vývojář webových/desktopových aplikací/systémů, s vlastními groupWare řešeními
multiplatforního Backend Serveru: http://kliknetezde.cz:5000 a
MS SYSTEM Generatoru https://kliknetezde.cz - do roka i ve WEB platformě Metro4
Zde naleznete Dokumentace, prezentace, screeny, videonávody atd k mým Future projektům:
- Hledám partnera, sponzora, prodejce, marketéra - možnosti jsou až neuvěřitelné
Mé stránky mají Boostrap pro mobil - ale tolik stručných informací, že je zobrazujte na PC a ne mobilu
pro mobil: http://kliknetezde.cz:5000/server/Media/Presentation
hledám nové projekty, spolupráci či trvalý úvazek jediná podminka je remote.
Ovládám jak WEB/APP/PCL/PLC Siements/Administrace Linux / Windows, vývoj multiplatformních programů (1 projekt pro IOS,Adnrdoid,Windows)
Instalace Windows/Linux Serverů/Služeb (LDAP,MAIL,SAMBA,FTP,cokoliv), Implementace API, tvorba sítí,webů, aplikací, terminálů na míru.
Zkušenosti ze 17 zaměstnání jako samostatný Administrátor/IT/Vývojář/IS Specialista/ v nadnárodních korporacích např:
ISAN Blansko IT Admin/OS/IS/Fuze ,Teva Brno IT Admin/dev, Heunisch Brno Linux IT admin/dev, Acer Brno IT TeamLeader/Support/Dev/Admin/Team Lead,T-Mobile Dev Server/MultiplatformApp
Nyní praduji sám na sebe z domu, protože ve firmách mě nedokázali ohodnotit ani využít mé schopnosti - PRÝ PŘÍLIŠ AMBICIÓZNÍ
(s výsledky, tlačil sem vývoj firmy moc rychle)
Nabízím tedy své služby za hod cenu od 500Kč (spokojen budu se 750Kč 5000Kč/Hod by ale bylo úměrné znalostem v porovnání se stavem IT v ČR a ve světě)
- aktuálně jsem klesl na 500, protože pracovat musím a nenacházím žádný zájem.
Future technology je u mě vidět přímo na https://kliknetezde.cz - Windows Online například.
žádný JAZYK ani OS/IS mi není cízí (Kromě C++)
Oblíbené technologie mám ASPNET/CORE,WPF,WCF, NodeJs,Vue,MSSQL,MYSQL,WIN/LIN.
Nebráním se ani vícero malým support úukonům na dálku (umím pomoci s čímkoliv, dětat analýzy,
najít a aplikovat řešení vašeho problému z místa- Telefonického hovoru, RDP/VNC připojení, správu serverů, nastavení AZURE/GCLOUD/DOCKER/GITHUB/GITLAB/ atd..
Více info na mých stránkách https://Groupware-solution.eu - Menu "Co děláme"
Github: https://github.com/liborsvoboda uvolněno 57 projektů, převážně serverů a systémů - ideální pro středně velké podniky
beru i malé zakázky (téměř s okamžitým vyřešením), než si mě konečně někdo zaplatí a vymezí pouze pro sebe, fakturace hodinová dle domluvy
když se učím něco nového (technologie) - nefakturuji, beru jako osobní rozvoj
Svoboda Libor
IT Architekt/Analytik/Vývojář/Administrátor/Údržbář/Školitel/ srdcem i duší
Zavoláním na tel: 00 420 724 986 873 se můžete sami přesvědčit
Dostupnost 24/7, email: Libor.Svoboda@GroupWare-Solution.Eu
Jsem vyjímka na trhu a odpovídám vždy (pokud to není jak zde je zvykem jen tupá úrážka)
Je možný i sponzoring projektů a domluva na spoluvlastnictví připravovaných projektů
EASY-DATA-Center - Lin/Win Groupware Backend Server Online Generator (FullAPI,FTP,MD,WEB,DB,HealthCheck,AutoServices) + 100 technologií
EASY-SYSTEM-Builder - WIN ANY system builder brzy AUTO generator ze Snapshotu Backend serveru - Vygeneruje celý systém podle struktury API
v budoucnu chci mít vlastní tým pracující v mém duchu - COkoliv, spolehlivě, kvalitně, rychle = levně
Hlídání serveru přes webSocket, MultiEmail API - vlastní emailer, Licenční Server,
Centralizované Tabulky, Vzdálená Správa/Monitoring/Administrace/Vývoj Serveru
A to vše Zdarma právě nyní:
Pravé tlačítko a překlad do češtiny vám vše na webu odhalí :)
Už jste slyšeli o MultiServerech? Takzvané GroupWare řešení?
Já to pojal trochu obsáhleji a z Backernd Serveru se stal MultiServer
s Fukcemi: Automatizovaného vývoje BACKEND Serveru, DB Management,
FTP Server, Multi WEB Server, Hromadný Emailer, Licence Server, a ještě by se něco našlo.
Tato šílená 60MB Instalačka pro ASPNETCORE (Lin/Win/Docker/GCloud) a snad každý typ
Databáze jediným příkazem obtiskne libovolnou databázi do Projektu a již Brzy
teď jestě manuálně, zkopírováním šablon zduplikuje tabulky na API s automatickým napojením
na všechny nástroje serveru, které po celou dobu nevidíte.
Web je v Metro4? Ultra nová technologie, byť 5let stará, vidět nikde není
Zato kritiky na můj Tscript Web s konstruktivním obsahem a ne nějakou reklamou co čekáte - bylo ažaž
Tak nyní je vše ke stažení na adrese SHOWROOM port 5000, Celý 60MB EDC Server, k němu EBSManager třeba s napojením na core logování
přes Web Socket nabízí všechny obsažené služby a servery zdarma.
Další vývoj či převzetzí stávajících řešení Backendů je otázkou dní - a ne měsíců jak doposud
Tak kdo zvládne nainmportovat databázi (již rok nabízím i s import scriptem), Tak celé to
HITECH řešení může vyzkoušet u sebe doma
Tak, třeba mě zas budete mazat, místo ostatních přínosných příspěvků jako Narrator na mém WIN online serveru
když už nic jiného ničit nemůžete
Přesto stále věřím že se najdou rozumní lidé a navážeme spolupráci,
a za měsíc snad již bude na světě plně automatizovaný GroupWare MultiServer Generator
Sekce DownLoad Vám dá odpovědi
Hledám práci či spolupráci na IČO či HPP (pouze remote s možností občasných návštěv):
Nabízím tvorbu Backend Serverů libovolného typu a použití pomocí vlastního řešení pro zrychlený vývoj
Dále Vývoj libovolných Desktopových, webových či multiplatformních aplikací (WIN + IOS + Android), či v libovolných jazycích.
Oblíbené technologie: Vue(React,Vite,OtherJs), NodeJS, Typescript, PHP, ASPNET, DOTNET, ASPNETCORE, MYSQL, MSSQL, Oracle, POSTGRESQL, OtherDB.
Instalace libovolných serverů či serverových služeb WINDOWS/LINUX
Práce na projektech od A po Z od návrhu technologií/řešení/postupu vývoje až po nasazení/zaškolení/předání
Dokončuji Stávající projekt a mám volné kapacity.
Fér přímá jasná domluva.
napište či volejte, Těším se na spolupráci.
Svoboda Libor
www.groupware-solution.eu
libor.svoboda@groupware-solution.eu
00420 724 986 873
Hledám práci/spolupráci na FullRemote s možností občasných návštěv.
Domluvit se dá na čemkoliv. Bydlím v Žlutava u Zlína
Oblíbené technologie MSSQL,MYSQL, NetCore, NET,WPF,C#, Vue, NodeJS,
- Vlastní řešení tvorby libovolných MS systémů a Backend Serverů, Doc Serveru, Git Serveru, atd..
Dělám Servery LIN/WIN, Systémy, Nadstavby, Můstky, Implementace API,atd..
Vývojářem jsem už 30let a tudíž mě nezastaví žádný úkol
více o mně:
https://www.linkedin.com/in/libor-svoboda-7b96014a/
https://github.com/liborsvoboda?tab=repositories
https://www.groupware-solution.eu/
https://kliknetezde.cz:8000/ login: tester/tester
https://kliknetezde.cz:5000/
https://kliknetezde.cz/
Nabízím tvorbu Backend Serverů libovolného typu s možností použití vlastního řešení pro zrychlený vývoj Dále Vývoj libovolných Desktopových, webových či multiplatformních aplikací (WIN + IOS + Android), či v libovolných jazycích.Oblíbené technologie: Vue(React,Vite,OtherJs), NodeJS, Typescript, PHP, ASPNET, DOTNET, ASPNETCORE, MYSQL, MSSQL, Oracle, POSTGRESQL, OtherDB.
Instalace libovolných serverů či serverových služeb WINDOWS/LINUXPráce na projektech od A po Z od návrhu technologií/řešení/postupu vývoje až po nasazení/zaškolení/předání
Dokončuji Stávající projekt a mám volné kapacity.Fér přímá jasná domluva.
napište či volejte,
Těším se na spolupráci.
Svoboda Libor
www.groupware-solution.eu
libor.svoboda@groupware-solution.eu
00420 724 986 873
Zdravím před víkendem všechny Tech nadšence
Už, zatím ještě lokálně, ale již Generuji libovolné Backend servery a desktopové systémy. Jak?
Podívejte se na náš nový Portál stvořený za 30dní
na http://KlikneteZde.Cz:5000 sice v angličtině ale s implementovaným překladem
kde najdete Kompletní Dokumentace, návody, Servery k vyzkoušení.
Bez registrace si můžete prohlédnout
Online Generátory Galerií, videí, Dokumentací, Prezentace,
Moderní Tooly pro Webové stránky a webové systémy,
které Po registraci budete mít k použití a stažení ZDARMA
Nabízím také své Kapacity k tvorbě libovolného BE/FE softwaru,
Serveru, rady či jakoukoliv jinou spolupráci
Toto byl krok k přípravě Online Generátoru Backend serverů
který bude již brzy dostupný OnLine
Toto vše je přínosné jak vývojářským firmám, tak jejich klientům
A to vše jede na obyčejném počítači
navíc s možností online vyzkoušení EASY SYSTEM-Builderu
na https://KlikneteZde.Cz
V případě dotazu mne neváhejte kontaktovat
Těším se na společné úspěchy
Váš http://GroupWare-Solution.Eu
Konečně dokumentace psaná za běhu...
Přiznejte se kdo z vás ma binec v dokumentacích nebo je nemá vůbec?
Konečně je tu nástroj, který umožnuje psát snadno a rychle dokumentaci za běhu. A Jak - přímo z webu, jen zkopírujete vaše poznámky - uvpravíte vzhled doslova jak budete chcít a uložíte. Dokumentace se sama overzuje, sama se překládá do libovolného jazyka. Jsou tu i další možnosti - exportovat do libovolných jazyků, vkládat naprosto cokoliv včetně grafů, schémat, struktur, UML, map , prostě cokoliv. Lze také exportovat do HTML a vložit do webu.
nebo co více vytvořit z dokumentace samostatný StaticPage Web s fultextovým vyhledávačem nazvaný ExpertDocManager. Běži ve 3 módech:
- samostatný editor,
- Doc Manager souborů ve složce,
- ApiDocManager s automatickým verzováním.
A aby toho nebylo málo, protože je to upravená technologie MarkDown rozšířená o další možnosti je k aplikaci i multijazyčný webový prohlížeč taktéž static Spa, který stačí jen nakopírovat do vašich současných stránek. Toto a mnohem více umožnuje nový software Static Web spustitelný pouhým poklikáním na index.html. ApiManager i prohlížeč a mnohem více najdete na https://kliknetezde.cz:5000/solutionservers
či přímo https://kliknetezde.cz:5000/Tools/ExpertDocManager/ a https://kliknetezde.cz:5000/Tools/ExpertDocViewer/
kde po načtení jen klikněte na reload Files
A je tu Další Novinka - Přes noc jsem vyladil Simple/Safe Privátní Git Server s možností sdílení
za pouhé 3000Kč - Server/5000Kč celý kód NETCORE6. Připravena Instalačka. EASY to USE.
a zpět k:
JEDINEČNÁ NABÍDKA - IMPLEMENTACE AUTOMATICKÉHO PŘEKLADAČE DO LIBOVOLNÉHO WEBU
(aplikace, stránky, script, atd.) podmínka - Internet Online
Vaše stránky ve všech jazycích bez námahy - natrvalo, možnost i dodělat další vychytávky
jako hromadný Export ve více jazycích (PDF,HTML,MD), atd, atd...
Automatická Mediální Dokumentace ve všech jayzcích za pouhých 5000Kč
nikoho nezaujaly, tak tu máme po týdnu programování ve volném čase další novinku
NABÍZÍM IMPLEMENTACI AUTO PŘEKLADAČE DO LIBOWOLNÝCH WEBOVÝCH STRÁNEK
ČASOVÁ NÁROČNOST 1-3 DNY ZA JEDNORÁZOVOU CENU 3000-5000Kč
Váš web tak bude po změně jazyku automaticky online přeložen do kteréhokoliv jazyku,
bez jakékoliv nutnosti něco ručně překládat.
Lze nasadit na wšechny typi webových aplikací.
Ukázky použití najdete třeba na:
https://kliknetezde.cz:5000
https://kliknetezde.cz:5000/server/Downloads/ProjectManagement/ExpertDocViewer/
https://kliknetezde.cz:5001/ ProjectManagement username/password admin@admin.eu/admin
Na portálu naleznete také spusty NoBuild Static Pages řešení, a mnoho dalšího
Tak Moc? jednorázová platba 10 000Kč/30 000Kč - Multimediální web možný i za Jediný Den
Nabízím ke koupi či provedení Universální AspNETCORE6 Server Projekt
sloužící jako multifunkční server k provozu
MULTIMEDIÁNÍ | MULTIJAZYČNÉ | INTERAKTIVNÍ:
WEBOVÉ STRÁNKY | PORTÁL | SOC. SÍT | INTRANET
s automatickým překladem obsahu do všech jazyků
na technologii ASPNETCORE6 pro OS LINUX,WIN,MAC,GCloud,Docker.
Projekt je připraven po 10 dnech (80hod*500) pro kosmetický portál, ale prý ostupuje
- normálka a projekt Odřekl bez zaplacení že prý
od začátku chtěl hotovu Úvodní Finální stránku zadaného vyhledání. (Prý to musí umět i bez dat)
Tak toto je výsledek tvorby řešení za 10 dní - snad se na mne usměje štěstí a pochopíte to vy a přeci je vydělám.
- Takže Ještě dnes rychle proměna v plně uživatelský Web s Administrací Group/SubMenu i Stránky,Banování,Limit Vkladů na IP,
Každý si může v Editoru Udělat 1 stránku na IP adresu - tak třeba nastal čas Aby se IT ukázaly
co dokáží s prostředky, které můžete vidět na mém portálu Https://KlikneteZde.Cz:5000
Projekt je již připraven k Extra rychlé Implementaci Libovolného webového Obsahu.
Server Využívá přes 100 Technologií.
Součástí je i vlastní MS IS System s Fakturací, Licenčním Serverem, MultiPobočky + 40 agend,
Další implementované služby serveru s rychlou konfigurací:
- hromadné zasílání emailů
- Agenda multimediální verzovaná dokumentace - pro - help,info,popisy,lektáky, manuály, formuláře,statistiky,
- Download sekce
- vlastní FTP Server
- Vlastní Management Dokumentace ()
- Monitoring sítí, HW/SW/služeb/
- Copy/Paste/Stránek Obsahu (Razor,JS)
- Dynamické API rozhraní s šablonami, SRV Schema, Auto Verzování
- Web Hromadné Funkce Zobrazení Galerií,videí, Prezentací s možností generování vlastních v klientské sekci
- Klient pro vzdálenou konfiguraci a správu serveru
- Neomezená možnost dalšího vývoje, rozšíření
- K dispozici rozšíření [GitServer, Projekt Management]
- k dispozici veškerá Dokumentace podpory vývoje způsobem COPY/PASTE z Knihovny nástrojů (200+)
- Kompletní Dokumentace jak na to, Inteligentní Dokumentace, video návody, vzdálená Podpora
- IS je jednodušší vývoj: Webová administrace i administrace webu z IS
- Implementovány Nejpokročilejší technologie Serverem pro Nejednodušší druh Vývoje
- 100+ dalších Mediálních nástrojů rozšíření je součástí serveru
- Nejpracnější je Dokumentace - je to Vždy nejpracnější úkol (i ona má už svou šablonu :)
- Metro4 100+ nástrojů
- Mermaid 100+ schémat
- přes 50 hotových nástrojů - prohlížeče, editory, buildery
- Javascript = Unlimited
Šikula, Grafik či jen s chutí mohou zde vytvořit více než běžný prezentační Web za jediný Den
Projekt je k vidění na https://kliknetezde.cz:8000 s funkčním distribučním loginem
Vývoj 1 libovoné agendy nezabere více než den.
např. plánovací kalendář, emailing, eshop, chat, messaging, atd, prostě cokoliv
viz ukázky kódů s stránek v sekci "ke stažení"
po jednodenním školení jak vyvíjet stránky to dokáže kdokoliv znalý tvorby DB
Takže nyní stvořený engine zkouším nabídnout vám
- a vydělat si alespoň na chleba
Instalace webového serveru 5000Kč- bez zdrojového kódu, možný libovolný vývoj se sazbou 500Kč / hod.
Předání Projektu Cena 30 000Kč - GitHub kód
možný libovolný vývoj se sazbou 500Kč / hod.
možný libovolný další vývoj 500Kč / hod.
Potřebujete Systém, Web, či aplikaci v řádech týdnů?
Tady je řešení...Systém Golden MS + Web - jako vzpomínka na mrchu co neplatí za práci...
- API + FTP + MaasMail + Download + 100+Tech + 50+Tools
S rychlostí buďte shovívavý, jede mi to na virtuálech doma
Informační Systém s vlastním Interaktivním Web Portálem
Web je plně generovaný z Web Builderu pomocí HTML editoru.
Není tak nutný žádný zásah programátora (to jen v případě rozšíření API)
Jen pomocí HTML builderu a kopírování kódů ze šablon stvoříte téměř cokoliv.
Řešení obsahuje Nepřeberné Množství Modůlů, Doplňků a nástrojů a možností.
Svůj vlastní API Server, kde pro vývoj převážně jen kopírujete šablony.
Dvojí Administrace Webu je možná jak z MS Systému tak i z Web Administrace
Stvořit Libovolný systém ze šablon dalece přesahuje vaše běžné,
náročné i Specifické požadavky dnešní doby...
A to vše stačí pro celý svět v mateřském Jazyce, o překlad se stárá Online Translator
Ukázka MS systému obsahující Web Administraci najdete na https://kliknetezde.cz
Ukázku 100% Generovaného webu najdete na https://kliknetezde.cz:8000
Ukázku dalších nástrojů, popisy modulů, možností atd jsou na https://kliknetezde.cz:5000
A to vše Plně modifikovatelné připraveno
k Libovolnému nasazení pro plnění vašich potřeb
Tímto hledám nové zakázky, jelikož mám volné kapacity,
které chci vyplnit jakožto živitel rodiny...
Tak Snad už se najdou moudří lidé co potřebují IT cokoliv (ne podvodníci)
a zahájíme plodnou spolupráci
s podzravem
Svoboda Libor
Potřebujete firemní Systém, nadstavbu, datový můstek, dotykový terminál či nově Web portál?
https://kliknetezde.cz - Ukázky Systému Online - otevřete v anonymní stránce kvůli certifikátu
https://kliknetezde.cz:8000 - Ukázka portálu online tester/tester přihlášení pro zobrazení web builderu
(bez nutnosti programování) můžete si zobrazit kód každé stránky webu
https://kliknetezde.cz:5000 - Popis projektů, dokumentace, nástroje, řešení, dema ke stažení, a další projekty
EDC & ESB jsou připravené řešení na jednoduch0 3vrstvé arcitektuře.
Tak jednoduchý vývoj systémů nikde jinde nenajdete a ukázky jsou všude i videa na youtube.
Je pravda ale že marketingově to ještě nemám dostatečně zpracované,
protože pro českou IT společnost je bohužel nutné to podat ještě jednodušeji.
Vyvíjet kromě datové části – kterou má každá firma jinou – v tom právě spočívá customizace , není vlastně co.
Cena za dodávku systému s 1 customizovanou agendou je 10 000Kč bez vlastnictví kódu
a každá další agenda 500-5000Kč dle složitosti (tzn. i ta nejsložitější třeba práce s videem se vejde do 10hodin)
Vlastnictví kódu lze dokoupit za 2x 25 0000Kč každé řešení EDC&ESB včetně 2hodinového zaškolení vývoje.
2 hodiny školení stačí a budete si umět vytvářet agendy sami - Tak snadný je vývoj.
pro WEB vám stačí EDC - EASY DATA Center - FTP,WEB server s mnoha přidanými dalšími funkcemi, vlastním WebPortálem+builder
(libovolný OS, libovolná DB, MaasMail,ServerBrowser, Any Web server type support, RAZOR,BLAZOR,SOCKET,Node,SPA,atd..)
pro MS System je potřeba ESB - EASY SYSTEM Builder - Windows systémové jádro pro vývoj a běh libovolného systému
(datové můstky, agendy, komplexní firemní systém, multimediální systém, nadstavby systémů, dotykové systémy, atd...)
Cena prací 500Kč/Hod
s pozdravem
Svoboda Libor
Žlutava 173
763 61 Žlutava
IČO: 869 73 681
DIČ: CZ 800 629 5319
mail: Libor.Svoboda@KlikneteZde.Cz
web: www.Groupware-Solution.eu
Mob: 724 986 873
Nabízím Dodávku a instalaci libovolného MS Systému již od 10000Kč bez vlastnictví kódu
- 1 agenga dle vlastního zadání (1 Tabulka),
výběr z 50 existujících agend (fakturace,objednávky, multipobočky, položky, adresář,...)
neomezený tisk s vestavěným ReportBuilderem
multimediální web portál s builderem je součástí (stránky tvoříte v html editoru)
vlastní FTP,Web,Licence,MaasMail - Server
Automatické API rozhraní,Data Manager, MD Manager
Možnost zakoupení kódu pro vlastní neomezený vývoj 25tkč za projekt(EDC,ESB)
Možnost zaškolení vývojáře - stačí pouhé 2 hodiny pro vlastní vývoj
3 vtrsvá technologie - DB, Backend Server, MS Frontend Aplikace
více než 50 nástrojů pro Web, 100+ web objektů, Multimediální rožšíření, animace
a mnoho dalšího a to vše hned ze Startu
MS system online k vyzkoušení na https://kliknetezde.cz
nebo Web Portal https://kliknetezde.cz:8000 login:tester/tester
či Web Tooly a jiná řešení https://kliknetezde.cz:5000
nebo v Download https://kliknetezde.cz/server
Chcete pohnout s IT Projektem?
Chcete realizovat váš nápad? máte poptávku na IT a zbytečně ji pouštíte k vodě?
Takto vypadá má stručná fakturace současnému klientu/hotové tasky:
23.10 10 - app review,app reservations,web guest detailShown
24.10 12 - komentáře hostitele, web komentáře a hodnocení
25.10 10 - balíčky kreditů,oprava dost pokoju/stejnyTypVicekrat,zadani date 1 tak auto do nextDay
26.10 8 - ExtraBed, refresh all terms
27.10 16 - Extrabed, Kalendář, Poptávka Update, Advertiser Calendar + Data View,Top5
28.10 14 - AppPřehledy-Oblíbené,rezervace,pokoje,oblibené,graphMail,Edit-Host/Advertiser,
29.10 8 - AppEdit-GuestSettings,App/WebRole,MultiBooking Calendar,
další možnosti:
- nabídnout za 10tkč implementaci editoru dokumentace (editace jako admin z webu, save v DB, obsah zobrazován jako nápovědy/nebo you video)
https://kliknetezde.cz:5000/server/Downloads/ExpertDocManager/ExpertDocViewer/
https://kliknetezde.cz:5000/server/Downloads/ProjectManagement/ExpertDocViewer/ - uvodní text může být náhodný z tabulky MOTTO
- Emailer Sender rozhraní pro zasílání emilů/newsleterů zpráv
- možnost naimplementovat fakturaci pro admina - dám zdarma
- možnost dolňkový WebEditor pro admina - Metro se musí dělat v apce
- možnost panelu nástrojů a vydáthnout AdminApiDocs,DataManager,Server & Net diagnostic
Tak neváhejte a Ozvěte se mi a domluvíme se na spolupráci.
Dodávky IT všeho Druhu: Weby, Systémy, Servery.
Svoboda Libor
https://www.linkedin.com/in/libor-svoboda-7b96014a/
https://github.com/liborsvoboda?tab=repositories
https://www.groupware-solution.eu/
https://kliknetezde.cz:8000/ login: tester/tester
https://kliknetezde.cz:5000/
https://kliknetezde.cz:5000/server
https://kliknetezde.cz/
Nabízím své služby...
Jsou tu vánoce, Čas utratit uspořené Peníze ušetřené na Státu, už je jen rozumně Investovat.
Nebo Sami dodáváte IT? Chcete začít dodávat Několik Systémů Měsíčně?
Zde je Řešení: MultiSever+MultiSystem+MultiWeb celé v Multi jazycích
EASY-DATA-Center a EASY-SYTEM-Builder
Obsahuje Více jak 20 typů Serverů FTP,Web,MaasMail,Monit,API,Git,TaskMan,License,Document
Součástí je i IS MS System s 80 agendami pro výše uvedené servery a Navíc.
Multipobočková Nab/Obj/Dob/Pokl/Fakturace, Výkazy výroby a ještě dále.
ale nešlo by to bez Multimediálního Dynamického Web Portálu.
Tvoří se jen pomocí Editorů z Webu či IS Systému s použitím HTML,css,Javascript.
Ktomu ale slouží více jak 200 objektů, které jen kopírujete a nastavujete.
A navíc můžete vybírat z hotových 5x portálů,5x systémů,50 webstránek,10 editorů,
20x prohlížečů,100x doplňků,100x animací,atd.. které jsou nachystány k použití
Podporovány jsou Všechny OS, Všechny DB a lze Vyvíjet Již jen Šablonami a Auto Funkcemi
Nevěříte? Podívejte se na multijazyčný Portál stvořený tento týden: na https://kliknetezde.cz
a Vyzkoušejte si sami Online v Editoru použitím Knihovny jak snadno lze tvořit.
A k tomu Nadřízený Management MS System Golden na https://kliknetezde.cz:8000
s agendami pro správu serveru, portálu, dokumentace, fakturace, výroba, atd...
Dnes ještě do řešení ještě doprogramuji Auto službu: Stažení celého Webu do Zipu :)
a to nabízí poznamenat si vytvořit úplný Public Online WebModeler ?
Tak mrknětě v jaké fázi je už teď.
A takto, můžu na počkání upravit cokoliv byste si přáli
Neváhejte mne kontaktovat a zahájíme spolupráci,
či jen kupte Řešení pro vaše IT Oddělení s 1 denním školením.
Cokoliv je možné libovolně upravit, nebo si objednat řešení na Otisk prstu
MS Systém k vidění na https://kliknetezde:5000, Web Portál na https://kliknetezde.cz
Dodávám já https://GroupWare-Solution.Eu Centrální Řešení Vašeho IT
Teším se na Vás...
EDC + ESB ještě Více než jen Interaktivní Mediální SYSTÉMY
EDC+ESB pouhé 2 jednoduché projekty umožňující
sestavit Jakýkoliv SYSTÉM, WEB, Portál atd..
striktně 3Vrstvá Technologie, tedy:
jakákoliv DB + Backend API server EDC + MS Systém ESB
lehce modifikovatelné jen s pomocí šablon
dokáži vykouzlit libovolný WEB či Desktopový Systém.
Chcete Informační Systém? nebo Webové Stránky? Jak?
Jednoduše budete jen kopírovat šablony pro API a Formuláře
a po vytvoření tabulek a k nim příslušných formulářů
- máte hotovo = Medální MS Systém třeba i s tvorbou 3D.
Nahlédněte na https://KlikneteZde.Cz a
vyzkoušejte si tvorbu Webu Online v připraveném Inteaktivním ŘEŠENÍ Webu.
Nebo se podívejte na MS SYSTEM online na https://KlikneteZde.Cz:8000
1 Měsíc trvalo vytvořit portál v cshtml-Razor|Mvc
ještě s Buildem a nasazením na https://KlikneteZde.Cz:5000
nyní již stačí Online Editor či přímo Editory v MS Systému
Řešení se nazývá EASY-DATA-CENTER a EASY-SYSTEM-BUIDER
více v IT již nepotřebujete.
Ozvěte se a zjistěte více jak si pořídit daná řešení ještě DNES
Dodává fa https://GroupWare-Solution.Eu
Teším se na Vás...
Zdravím Všechny zájemce O IT, které je přínosem a né přítěží.
Také Hledám zájemce o mé služby IT a zde je názorná ukázka mé činnosti...
Mé Unikátní Projekty EASY-IT-CENTER + ESB - už ne EASY-DATA-CENTER,
protože rozsah Služeb serveru vykrývá téměř celou IT AGENDU (chybí už jen Email server)
a za to převyšuje Mnohem více službani navíc Například DB Notifikace EMAIL,SOCKET,..
ALE co je ta Další NOVINKA?
Právě jsem dokončil nový SOFTWARE: STATIC Web STUDIO,
které jsem začal psát před 3 DNY 24-27.12.2023.
SYSTÉM ZA 3 DNY - potřebujete také systém? Ozvěte se...
můžete sami posoudit, najdete ho na:
https://KlikneteZde.Cz/server-web/static-web-studio/
Takový SYSTÉM U/Vidíte 1x v životě, že?
Jen 3 Dny tzn. 163750Kč = Kdybych dodával třeba Právě Vám
A k čemu slouží? k tvorbě celých Webů, Portálů, Intranetů,
EShopů a WEB COKOLIV alespoň ve spojení s EASY-IT-CENTER či jiným API serverem.
Nahlédněte ALESPOŇ ze zvědavosti o IT, či ZDA SI JEJ NEZAKOUPÍTE?
AKTUÁLNĚ jej podceňuji na POUHÝCH 10000Kč.
K vyzkoušení ONLINE na
https://kliknetezde.cz/server-web/static-web-studio/
Stačí vám 2 Nástroje, Studio A Tool Creator, pravda je ale
taková:
- více než 400 COPY/PASTE objektů pro tvorbu čehokoliv.
- Implementována SQLite Databáze pro Samostatný BĚH na ANY WEB server
- Nástroj Automatický Překlad Do všech Jazyků, včetně všech manuálů,atd..
- přes 50 dalších Editorů,Prohlížečů, Galerií, Grafů, Schemat
- 50 šablon moderních Web Stránek na stále stejné technologii METRO
- Implementovám Grafigký Modul pro Schémata, Grafy, Struktury, UML,..
- Implementován Animační Modul v více jak 50 druhy Animací navíc
- Generuje Online Static Stránky, s JS API, bez Buildu, Online změny
- více jak 1000 Příkladů pro COPY/PASTE použití v Dokumentacích
- ONLINE PODPORA - Těším se na každou Novou Spolupráci
- Navíc K Dispozici MS SYSTEM z řešení EIC+ESB s více jak 50 službami
- JEDE na Všech WEB server - JE STATIC, TZN. nepotřebuje nic než URL
- Není potřeba víc než HTML,CSS,JS - vše předchystáno
MS System ONLINE na https://KlikneteZde.Cz:8000 s kompletní správou Všeho
a mnohem více.., stačí se ozvat, pročíst dokumentaci, Vyzkoušet Online..
v IT aktivní 33let Svoboda Libor, snad to už vidíte...
00420 724 986 873
libor.svoboda@KlikneteZde.Cz
libor.svoboda@GroupWare-Solution.EU
tak neváhejte a Využijte potenciál mých služeb a produktů...
EASY-IT-CENTER & EASY-SYSTEM-BUILDER CENY, VÝVOJOVÝ PLÁN
9.1.2024 nasazeny Aktuální verze na Domácím PC na vesnici k vyzkoušení
CO BUDE FINÁLNÍ?
- ONLINE GENERÁTOR MS SYSTÉMŮ DLE STRUKTURY DB
- BUILDER PRO TOUCHPANELY, BUSINESS PANELY, ANY SYSTEM
- WEB PORTAL s MULTI WEB SERVERS - cokoliv z GITU (React,Php,Electron,Vite,Gulp,..)
- SUBDOMAIN WEBSITES - dá se říct skoro JEDNODOMÉNOVÝ HOSTING
- MULTI IT SERVERS & SOLUTIONS, již nyní s velkým počtem Unikátních Funkcionalit
Změny ve volných chvílích při zaměstnání 12.2023 - Nestačím Zapisovat https://KlikneteZde.Cz
30.12 Generic API , nyní stačí registace názvu nové tabulky do příslušné Skupiny Dle Práv
29.12 Agenda Dynamické Moduly a Služby [custom HTML/CSS/JS API moduly] + Sekundární Zabezpečení API
28.12 Připraven Interface pro DBWebStatic FileStructure
27.12 Agenda Static WebSites - další webstránky na subdoménách url://website.domain.xx nebo url://domain.xx/website
26.12 Agenda Operace Systému - DB SP operace, Import/Export/Backup/Clone/Generate Docs/Generate DB Object atd..
24-27.12 STATIC WEB Studio https://kliknetezde.cz/server-web/static-web-studio/ - prezentační fáze pro Global Administrátor
23.12 Předělána Agenda ServerSetting do Dynamic Form, nová nastavení automaticky přiskočí
9.1 po změnách Změna Klient Setting na Generic Form + MultiSameTab + MultiInstanceCloneByDrag
09.12.2023
ESB - Implementován SystemMenu ToolTip Dle Param nastavení, zobrazen Popisek menu
ESB+WEB - Imlementována Agenda Správa globálních HTML, a Finálně převeden Layout do DB správy
Web je Nyní Plně v Režii DB a je Skládán z částí HTML Globální + Stánka z Editoru dle Práv v nastavené sekvenci
Ceník EITC-ESB = EASY-IT-CENTER & EASY-SYSTEM-BUILDER
Kč 30000 EITC-ESB Limited = MS řešení s Portal s omezeným multiwebserver 10x,AutoSched 10x, StaticWeb 1x
Kč 50000 EITC-ESB Unlimited = Kompletní řešení Unlimited
Kč 100000 EITC-ESB OpenCode = Uvolněny kódy pro vlastní Vývoj pro Vlastní Potřebu
Kč 150000 EITC-ESB OpenServers = +WEB/MS Doc Server,GitServer,TaskManServer a budoucí (Email,Notify,atd..)
Kč 15000/rok EITC-ESB MainTenance = K dispozici unlimited aktualizace, Online Správa Projektů, AutoUpdate/AutoRepair
Kč 1500/hod EITC-ESB RemoteSupport = Online Tel/Remote podpora
Kč 30000/Tyden EITC-ESB DevTraining = 2dny Kompletní Představení produktů,1den Zaučení vývoje,2dny BONUS tvorba dalších MS/Web Agend
Kč 500000 Partnerství a Distribuce = Plný přístup ke všemu, spolupartnerství při vývoji, udávání směru a priorit
VÝHLED 2024
LÉTO 2024 -
ONLINE GENERÁTORY - API,MS FORM, WEBFORM(z json),
ONLINE Správa klientských Projektů,Build Projektů, Nasazení Změn, Refactor, Stažení Instalátorů
ZIMA 2024 - Průmysl - Implementace Siemens, TouchPanel Builder
EIC&ESB EasyITcenter & EasySYSTEMbuilder - Jediné Řešení pro celé Vaše IT
provozováno zatím na stanici na vesnici, to je důvod aktuální rychlosti
LZE PŘEDVÉST NA VAŠICH PC
Systém byl právě jedinou DB Tabulkou rozšířen o podporu Modulů
Libovolného programovacího Jazyka. Byly nahrány Pomocné ,
Informativní a Předchystané Moduly, které mám v plánu naimplementovat.
WEB Portal již nelze téměř rozšířit, pouze se bude zdokonalovat
Script Global Knihovna pro všechny potřebné funkcionality.Vývoj
je už ve fázi, že WEB lze vyvíjet plně Dynamicky ONLINE, API Chyb
pouze QUERY Builder pro plně Dynamické API BEZ programování, a Vývoj
Libovolného Systému je již jen Grafická Tvorba Datového či jiného
TŘEBA multimediálního Formuláře.
Nové Video
https://youtu.be/6ThVBv_diGo
Online Web
Https://klikneteZde.Cz
Plné 30denní verze k vyzkoušení,
či si je nainstalujte Klienta a připojte ke sdílenému API serveru
https://kliknetezde.cz/Downloads/EITC
MSQLDB 80MB, Server 100MB, Client 30MB + 1GB ukázkové Doplňky
Ostatní HTML+JS+CSS 10GB k roztřídění a Implementaci
Online System K Prohlédnutí
https://kliknetezde.cz:8000
V případě jakéhokoliv Zájmu mne neváhejte kontaktovat.
PS hledá se OBCHODNÍK ideálně s chutí na Okružní Trasu
po velkých Firmách,kde provede Instalace a zpětná Vazba ukáže
s pozdravem
33let IT vývojář
Libor Svoboda
MultiJazyčné Projekty a Řešení EasyITcenter & EasySYSTEMbuilder
to je Správa IT ve vaší firmě s nejmodernějšími technologiemi a agendami pro všechny typy případů.
Otevřené Řešení nabízí snadnou tvorbu Web Portálu + neomezeně web aplikací pro správu vašeho IT.
Snadná Tvorba Libovolného Systému: IS,Nadstaveb,Serverů,DataCenter,Dotykových Panelů,Controlingu,...
Připraveno Řešení WebHostingu, Generování Webů, Dokumentací, Portálů,...
Snadná tvorba pomocí Editorů v Systému pro správu implementovaných JS knihoven,
JS/HTML Editory pro snadnou tvorbu I/O Web aplikací pro práci s Daty
Agendy pro Monitoring stavů SRV/HW/SW/DB/NET/Služeb v cca 2000 Typů sledování.
Agendy pro Sdílení Dat, MassMailing, WebSocket Messaging a sousty dalšího.
Přes více jak 50 IT agend pro centrální správu IT.
Implementovaný Systém Ovládání. Totéž je možné nasadit ve Web Managementu.
Přes více jak 40 Web Ui Frameworků nachystáno k okamžitému Použití.
Online Nástroje pro další Neomezený rozvoj Projektů pro:Libovolné Servery, Systémy, Weby.
Spuštěna Online Dokumentace, Nápovědy, Popisy a Ukázky na:
https://kliknetezde.cz/EIC&ESBdocs/CodeDocs
Komplet v češtině [všech jazycích] díky zabudovanému Online Překladači
Static SPA Portál generovaný z Editorů Systému můžete vidět na:
https://kliknetezde.cz/Portal
MS Systém k vidění Online na webu najdete na:
https://kliknetezde.cz:8000/
Celé Řešení k dispozici na 30 dní k instalaci v sekci Download
https://kliknetezde.cz/Downloads/Downloads/EIC&ESB/
Přes 20 typů Serverů Ihned k dispozici.
Přes 1000 Web Objektů ke skládání libovolných webu, intranetů, portálů, aplikací....
Připravovaný je Vývoj Online, kde si budete moci vyvýjet své řešení s možností
implementovat nové technologie z Hlavního projektu.
Nástroje pro vývoj Online jsou k vidění v Portálu Dokumentace s CZ nápovědou
Automatická Kontrola chyb a čistoty kódu.
Možnost Implementace Modulů = Nových Agend: Serverů, Systémů, Aplikací, Webů
v libovolném Programovacím Jazyce A mnohem více
Nachystáno dalších cca 200 řešení Serverů, Systémů, Událostí k Implementaci.
Startovací Řešení bez kódu za pouhých 35 0000Kč.
Tak neváhejte a modernizujte své IT, váš Vývoj IT
na Vývoj Online bez nutnosti Buildů a složitých Implementací
EasyITcenter & EasySYSTEMbuilder = celé IT v Jediném Globálním Groupware Řešení:
Naprosto vše: třeba až po Řízení Výroby, Strojů, Průmyslových PCL,Media, Streamy,Touch Panely...
[Generátor Vyrobních (rozklíčováno Siemens PLC 300-15XX) i Business TouchPanelů je plánován na ROK 2025]
STÁLE IGNORUJETE NOVÝ IT VĚK 21.STOLETÍ?
GLOBÁLNÍ EIC&ESB GROUPWARE ŘEŠENÍ OBSAHUJÍCÍ SPOJENÍ VŠECH STĚŽEJNÍCH TECHNOLOGIÍ DO 1 CELKU
-
Přímí Import libovolného Programu (Github), Systém se může zkládat z Různých programů, svázaných pouze Daty
-
Programy mohou být v Libovolném Jazyce: jsou spouštěny Příkazy/jako Include Web/ Extended Tool
-
OTEVŘENÉ ŘEŠENÍ PRO LIBOVOLNÝ UPDATE PŘÍMO NA MÍRU - JEN ŠABLONAMI (či vytvořím NOVOU)
-
KAŽDÁ IMPLEMENTACE JE BRÁNA GLOBÁLNĚ: Nový NÁSTROJ pro Celé Řešení, Update Stávajících Formů
-
V 1 OSOBĚ AŽ 50 NOVÝCH AGEND NENÍ ŽÁDNÝ PROBLÉM - 2 AGENDY DENNĚ (ČÍSELNÍK zabere 1hod)
poznané Z DENNĚ PROGRESIVNĚ AKTIVNÍ 33leté práce v IT
v 15 Nadnárodních Firmách Heunich,Isan,TEVA,Acer,Edts,TVD,...
Hledám IT Firmu, Obchodníka, Zákazníky pro spolupráci na tomto Unikátním Řešení.
Vysvětlím, zaškolím, zaučím: Stačí 1 Týden, (ale sepsat všechny možnosti Řešení: zabere alespoň 1/2Roku)
Chtěl Bych se Věnovat Vývoji: a VY byste mohli Distribuovat Klony:
- Chystán Online Portál pro Správu projektů, Sílení Nápadů, Knihoven, Chytrý Vývoj Online, Online Update, Online Build
EIC&ESB = Servery, Systémy, Weby, a Komplet správa IT v 1 Řešení
Řešení Pozkládané z Šablon:
- DB: Tabulky,Prodecury,Pohledy
- BE: RestFull API, Generic API, Images, Files, Dynamic Procedures, API = Služba (např: MassMailing)
- FE: Šablony Formulářů číselníků, Agend, 3D, Video, Web, ANY DOC, ANY FILE TYPE Viewer,
- FYIreporting: Report Resigner/Viewer,cmd, pro Grafickou tvorbu Tiskových Sestav
- TOOLS: přes 50vyladěných Customizovaných Github Projektů jako rozšíření
- Jádro: Metro: přes 500+ Objektů pro Stavbu Systému, Webu + Knihovny: Animace,Sequrity,Tools,Funct.
- Web Tools: přes 100 statických Nástrojů vyladěných ihned k použití
- Web Tvorba + BE + FE : pomocí vestavěných Editorů,
Chystán Portál Online - Nástoje k vidění na portále - Připravený UPDATE Editorů: UniversalEditor NahradíZastaralé
(Jednoduchý REPLACE CODE ve VYBVRANÝCH SAMOSTATNÝCH FORMULÁŘÍCH) - Server = MultiServer, Multi Lang, Multi Web, Multi Portal, ANY DB
- System = local MultiWebserver, Multi Lang, ANY SYSTEM, TOUCH, SIEMENS, STROJE, MEDIA
- Automaticky Překládaná Globální Dokumentace, i 3tích stran do Všech jazyků se všemi Návody,Tipy,Kódy
- Nachystáno 5GB Statických Nástrojů Použitelných jak v Systému (WebView2/CefSharp + Interní WebServer), tak na Webu
[web aplikace se tváří jako formulář SYSTÉMU]
(příklad Inteligentní Dokumentace zabírá 1,5MB)
(Editory, GEnerátory, Webu, Dokumentací, Stránek, Databázi, Grafiky, 40x Statické Frameworky, Knihovny, Atd.)
Nachystáno k Implementaci přes dalších 20Typů serverů:
Video Konference, SSH, Stream, SocketCetral Messaging, Multi Sub Domain Web, MultiWebServer, atd..
- Nachystáno 5GB Statických Nástrojů Použitelných jak v Systému (WebView2/CefSharp + Interní WebServer), tak na Webu
Nachystány Nástroje pro tvorbu MVC globálních Editorů pro Celé Static úložiště
Tvorba LIBOVOLNÉHO SYSTÉMU - pouze kopírování FORM šablon a úprava dle Datasetu Agendy: Tabulky
Tvorba LIBOVOLNÉHO SubServeru - řízení Scriptů a cmd příkazů, node ./server.js = nový Web server
Podpora LINUX/WINDOWS/ANY DATABASE/MACOS/MULTILANG/DYNAMIC WEB - tvorba pro Klienty stačí jen zabudovanými editory.
Připravena Implementace Controling, DocumentFlow, Dynamic Report Generator, Online Dev, Private Github,.....
Jsem Ochotný se rozumně Domluvit - Pro Vás je to Možnost Distribuce Unikátního IT Řešení Hned ze startu
-
nabízí se absolutně jednoduchá tvora Agend, Reportů, a jiných Drbek pro zákazníky,
-
Ultra Rychlé Implementace Libovolných Customizací,
-
pro Vývoj Stačí Znalosti Excelu a Týden školení: - Vlastně jen Tvorba Tabulek (pomocí Šablon s pravidly)
-
Vývoj je tak Rychlý, že pracnejší je Optimalizovat a nahrazovat již hotové sekvence: Práce pro juniora (REPLACE)
-
Potřeba Dopsat Dokumentace: Možnosti a dovednosti, Pravidla, Logika, Sdílení, které Řešení Aktuálně již Umí čeká na Sepsání,
Tato Část AUTOGenerována do Dokumentace [Popisy a Významy Menu Položek]:
PODÍVEJTE se PROSÍM na POPISY Těchto 4 AGEND ze 100 V Dokumentaci:- SeznamImpl.ModulůServeru
- SeznamukázkovýchModulůSystému
- MikročíselníkyunikátníFunkce
- SeznamImplementovanýchAgend
- ExpertDocGrafickéUkázky - Brzy DokumentFlow
A ŘEŠENÍ OBSAHUJE V DESÍTKÁCH NE-LI STONÁSOBNĚ VÍCE,(Aktuálně v nastavení je méně než 5% dostupných konfigurací)
:Funkcionalit, Nástrojů, Předchystaných Vazeb v Existujících 100AgendáchVše se Kloubí Spojením Všech Typů Jazyků [SERVER, DESKTOP, WEB, CMD, DB, NET] - TÍM JSOU MOŽNOSTI NEOMEZENÉ
STAČÍ STAHOVAT Z GITHUB, GITLAB, AZURE, GOOGLE, NPM PACKAGES, INTERNET
A přitorm stačí základy C# pro Libovolný Vývoj:- Třída se Překlápí z Tabulky - Tabulka z Šablony
- FULL API se Navazuje z Šablony na Třídu = BE Hotovo
- Formulář se Překlápí z Tabulky přes Šablonu TYPU Formuláře
- Reakce formuláře jsou dané Systémem Jsou Součástí FORM Šablony
- Jen Otevřít Definici Menu, Vybrat Nově Detekovaný Form a přiřadit Práva, umístění v Menu a Překlad
= FE Hotovo
A JE TU NOVÁ: AGENDA, ČÍSELNÍK, EDITOR, PROHLÍŽEČ, GRAF, VIDEO, DOKUMENT, PŘÍLOHA, NOTIFIKACE, SOUBOR, PŘÍKAZ,...
Tak si nenechte utéci Příležitost Dodávat DOSLOVA DESÍTKY SERVERŮ, SYSTÉMŮ, WEBŮ I MĚSÍČNĚ
z Centrálního Řešení s možností sdílení veškerého Vývoje s Klienty - Odkup Agend Od klientů do Central Systému.
MULTI LANG SERVER/SYSTEM/WEB [nic jiného neexistuje vše je buď Server/System/Web]: Tedy Řešení pro Celý Svět.
Já budu dále Pracovat na rozšiřování JADRA SERVERU A SYSTÉMU:
Jsou To 2 C# Projekty: NetCore6 (+ANY WEB) a NETfrm 4.6.2 WPF - umí naimportovat Libovolnou APP jako Modul
Vše Online K Vidění JIŽ NYNÍ, Provozuji doma na starším Serveru jako SRV.Farmu:
Nově Spuštěn AZURE Virtuál 2CPU,8GBRAM,WIN10,pro Provoz Serveru,
- SYSTEM Klienta si můžete Stáhnout, Rozbalit nastavit API URL Serveru a Vyzkoušet u SEBE Doma
V dokumentaci aktuálně možnost procházení kódu projektů a podívat se na strukturu a složitost.
Lze se Domluvit třeba i na Distribuci/Implementaci Samostatných Nástrojů
(Implementováno přes 300 a dalších 500čeká): Brzy K vidění na Serveru, Zdroj Github.
UŠETŘETE SI I SVOJI PRÁCI A ZAČNĚTE POUŽÍVAT TOTO ŘEŠENÍ.
VYVÍJET BUDE MOCI KAŽDÝ KLIENT DO CENTRÁLNÍ BANKY FUNKCIONALIT - NE DATA
30DENNÍ PLNÁ VERZE S NÁSTROJI KE STAŽENÍ (VELIKOST dělají Implmentované Statické Nástroje)
30DENNÍ MINIMAL PLNÁ VERZE (bez statických nástrojů ke stažení)
https://KlikneteZde.Cz DocPortal,WebPortal,150 Apis, Plné Řešení s 7GB Static Nástrojů a Knihoven
https://KlikneteZde.Cz:8000 SYSTEM Online
https://GrouWare-Solution.Eu Ovládané Technologie a Řešení(implementované do USER-Friendly Systému)
tak Vyhoďte Vašich 10 a více Serverů a Nahraďte Jej Jediným. = Úspora Energií, Náročnosti, Prostředků,..
1 ŘEŠENÍ = MAXIMUM KOMPATIBILNÍCH 100% VAZEB
ČI SI CHCETE OBJEDNAT ŘEŠENÍ ČI SYSTÉM NA MÍRU?
EXTRÉMNĚ RYCHLÉ = LEVNÉ DODÁVKY NA MÍRU S TECHNOLOGIEMI, KTERÉ JINDE NENAJDETE
00 420 724 986 873
Svoboda Libor ITčkář celou Duší s nutností dělat na jiných projektech pro uživení rodiny
Projektům mohu aktuálně věnovat 1Týden Měsíčně - I TAK = VŽDY ZÁSADNÍ POSUN
Neváhejte Mne s čímkoliv Kontaktovat, Rád Vše Vysvětlím/Předvedu.
Moje sazba je pouhých 750Kč/Hod s Nasazením dle potřeby (až 240Hod/Měsíčně)
V IT od 1991Atari 65XE(Turbo,Basic) - DOSUD
opravdu VLÁDNE V CZECH IT SLEPOTA?
https://kliknetezde.cz/EiC&ESBCodeBrowser/index/index.html
EIC&ESB NOVA VIZE: AUTOMATICKE GENEROVANI WEB/MS ANY SYSTEMU EDITOREM
!!! HLEDÁ SE SPONZOR
prave pracuji na portale VYVOJ online a SKOČIL mi do TOHO TENTO NÁPAD
Tim se DOSTAL na TOP PRIORITU. Neni ale Volný čas musím VYDĚLÁVAT JINDE.
POKUD SE NAJDE SPONZOR, MŮŽE TENTO NOVÝ NÁPAD PRODÁVAT UŽ DO 14 DNŮ
Finální Řešení pro Generovaní SYSTEMŮ+WEB SYSTEMŮ pouhym Založením Tabulky v DB.
ZDE JE POPIS JAK NA TO:
1] Vytvořit Tabulku třeba s napovědou jak na to TemplateTableList již nyní]
2A] Překlopit na BE Server jako Pevně Danou API = SCAFOLFING
s použitím TemplateTableListApi.cs šablony již nyní
nebo
2B. Naiplementovat jako [Chystáno] DYNAMICKOU API pomocí SQL Definice z EDITORU
3] a Nyní MÍT Připravený GENERÁTOR HTML + FORM TEMPLATE
tak jak už mám Šablony FORMUÁŘŮ nyní
= nová STATIC URL ADRESA na SERVERU - Kterou stačí Vložit do SYSTEM MENU
jako NOVÁ WEB AGENDA lze již nyní, + Nastavit Oprávnění
A JE HOTOVO
JESTLI TOTO NE NAPROSTY PRELOM v IT tak už FAKT NEVIM.
Pouhým naklikáním Libovolneho Typu DB[Tabulky+Indexy+ForeignVazby] dostanete
celý IS SYSTEM, CONTROLING, TOUCH PANELY, WEB SYSTEM
či LIBOVOLNY SYSTEM založen na SYSTEMU AGEND.
POUZE NOVE FUNKCE coz je u IS SYSTEMU NULA NULA prd budou vyžadovat trochu namahy.
[myšleno TŘEBA STREAM VIDEA - VYSILANI TV]
A to JEDNODUŠE s možnostmi:
- vyřešit v JS,HTML,CSS Přímo ve formuláři ONLINE,
- nebo v C# na BE SERVERU v CHYSTANEM VYVOJI ONLINE
+Rebuild a Nasazeni nove Verze na SERVER - nebo LZE implemetovat Podporu i jinych jazyku ALE PROČ
- ČI POŽÁDAT MĚ A V REKORDNIM ČASE BUDE VYŘEŠENO
TAKŽE VÝVOJ DEV PORTALU ONLINE ODKLADAM A AŽ NAIMPLMENTUJI
VÝŠE ZMÍNĚNÉ A JAK BUDE ČAS SE K NĚMU VRATÍM či NAJDE SE SPONZOR?
tady se podívejte JAK MĚL VYPADAT:
https://kliknetezde.cz/Servercoretools/standaloneapps/developerboard
Systém s EDITORY k Vidění na https://klikneteZde.cz
Multi WebServer s Multi Dokumentací na https://KlikneteZde.cz/
SYS Editorem Generovaný Portal: https://KlikneteZde.cz/Portal
Globální zatím jen 5% Dokumentace: https://kliknetezde.cz/server-doc/md-book/book/
Nebo SE MI ZASE BUDETE POKOUŠET NAHRÁVAT NA SERVER Č-URÁKY?
Tak Kam v OBLASTI IT patříte VY?
Úvod EIC&ESB-Globální IT Řešení na míru
EasyITcenter & EasySYSTEMbuiler - Globální Řešení vašeho IT Obecné Informace o Struktuře, vazbách a možnostech tohoto Unikátního Globálnho Řešení Celé oblasti IT až na malinké vyjímky.
Úvodní Informace o vlastnostech a použítí projektů, které je nyní mnohem širší a proto si projděte další informace, kse se dozvíte více
Minimal Info EIC+ESB
Pro myšlení, vývoj nástrojů a práci s nimi hodné 21. století
Visual Studio C# projekt EIC ASP NETCORE6
Visual Studio C# projekt ESB NetFramework4.6.2
- naprosto snadná pro tvorbu 3-vrstvých systémů (LIBOVOLNÁ DB, BACKEND-SERVER, FRONTEND-KLIENT) se znalostmi excelu
- Stačí vytvořit tabulku pro data a formulář, vše v grafických designérech
- Takže se doslova proklikáte systémem, každý den 1 tabulka = prodejní systém s objednávkami a nabídkami za měsíc
A to není ani náhodou vše.
Nemusí to být jen datový systém, ale bez problému i multimediální, pro stříhání videí, práci s fotkami nebo 3D
nebo dokonce ŘÍDÍCÍ SYSTÉM pro řízení stroje (v současné době je podporován PLC SIEMENS),
řešení je chystané na Rok 2024.
Nebo Řídicí systém, Zálohování, DataWarehouse, Controlling, BI OLAP, Flow Processes,
Výrobní, informační nebo obchodní dotykové terminály. LZE TAKY POUŽÍT POUZE JAKO ROZŠÍŘENÍ NEBO PROPOJENÍ SYSTÉMŮ
UNIVERZÁLNÍ MODERNÍ ŘEŠENÍ BE + FE
Za myšlení, vývoj nástrojů a práci s nimi hodný 21. století
PRO VÝSTAVBU JAKÉHOKOLI 3vrstvého technologického softwaru nebo jeho částí
- EasyITcenter - Univerzální multiplatformní serverové řešení MultiDatabase Backend s implementovanými všemi standardními technologiemi
- EasySYSTEMbuilder - Univerzální moderní řešení Metro WPF Frontend System Builder pro rychlý a snadný vývoj jakéhokoli systému s minimálními znalostmi
- Kombinované řešení - je jednoduché řešení pro rychlý vývoj jakéhokoli moderního systému,
běží perfektně na připraveném System Core a šablonách pro Graphical/Click Development
Vývoj celého řešení jen založerním DB Tabulky a následně pomocí pouhého Kopírování a Přejmenování Šablon
EasyITcenter
Pro myšlení, vývoj nástrojů a práci s nimi hodné 21. století
Visual Studio C# projekt EIC ASP NETCORE6
Jednoduchý vývoj Universálního Zabezpečeného MultiDB MultiOS MultiLang Backend Serveru a násobně více
S implementacemi RESTFULL / WEBSOCKET
- Se všemi typy šablon pro INSERT / UPDATE / DELETE / SELECT / PROCEDURE / SUBFORMDATA / atd.
- S DATABÁZÍ, šablonou tabulky, šablonou Procerure, šablonou zobrazení,
- Zálohování/obnovení/nastavení práv DB a další příklady
- S tabulkami, indexy, cizími klíči ve všech standardních použitích DB
Vývoj API pomocí pouhého Kopírování a Přejmenování Šablon
EasySYSTEMbuilder
C# WPF Nízký/žádný kód řešení Pro okamžitý vývoj vašeho vlastního SYSTÉMU:
- PRO KAŽDOU Společnost/Data Management/IS/OS/HW/Dotykobé Panely/Stroje
- Podporována vícejazyčná aplikace WPF
- Plná podpora pro tvorbu libovolného MS systému (moderní SAP atd.).
- Řídicí systém s podporou grafů
- Podpora jedinečného mediálního systému,
- Podporovány dotykové terminály
- Jsou podporovány dotykové terminály Business/City/Country/JAKÉKOLI na monitorech Windows AIO
- Tisíce nástrojů na Github zdarma
- Transparentní čistý kód
- Vývoj bez či s minimální znalosti kódu - Vývoj Grafickými Nástroji, zaučení Orientace v knihovnách
- Odkup Nových Agend do Centrálního Projektu
- Vývoj a Implementace Nových Agend a Rozšíření Online
- MultiJazyčná Dokumentace,
- Vlastní WebServer pro Statické moduly
- Přidružené Aplikace
- Multi Web Server Pro Nativní a Reakční Web Aplikace
Standardizované Typy Šablon:
DATAView / DATADetail / DATAView se SubDATAview / DATAView se SubFullDataDetail
3D / Dokument / Video / Web
1. Pro Tvorbu Jakéhokoliv informační / multimédia / Control/ Flow / reporting /Touch / Monitor / a dalších systémů
Vývoj pomocí pouhého Kopírování a Přejmenování Šablon
#FYI Reporting - Report Designer / Viewer / Cmd
Zdarma Report Designer a Viewer pro tisk všech typů dokumentů / čárových kódů, EAN, QR
EASYTOOLS
- Doplňky pro dotykové panely, ovládací prvky, datové typy, formuláře, média, dokumenty, 3D,
- Jsou zcela zdarma ke stažení (součástí ESB OpenCode balíčku)
- Github/Gitlab/Azure komunita pro zahrnutí více než 1000 nástrojů do systému podle komunity
- Doplňky jsou upravené Github Projekty začlěněné jako Rozšíření
STÁVAJÍCÍ KLONOVÉ SYSTÉMY VYTVOŘENÉ ZA 14 DNÍ
- LicenseSrv
MultiOS licenční server s naslouchajícím API GET/POST server / generování neomezených statických/dynamických licenčních KÓDŮ a aplikačního klienta pro správu serveru - NÁVODY Windows XP+ Implementace produkčních zdrojů do výroby produkční společnosti Pro kancelářské / dotykové panely s neomezeným počtem klientů a možností tisku
- ShoPingER Windows XP+ více pobočkový systém nabídek/objednávky/fakturace s multimediálními soubory podporovanými neomezeným počtem klientů a možnostmi tisku
- LicenceShoper MultiOS License Server PLUS Windows XP+ více pobočkový fakturační systém [LicenseSrv + ShoPingER]
ŘEŠENÍ - KDE NAJÍT KOMPLETNÍ INFORMACE
Veškerou dokumentaci, licenci, případovou studii, ceník, média, informace pro vývojáře, nápovědu, manuály, informace o technologii, instalaci, obrázky, videa, soubory ke stažení atd. naleznete zde:
- Youtube: https://www.youtube.com/playlist?list=PLmE7gP9LTBimNJQ444ypG8HVce23fa2Hb
- Facebook: https://www.facebook.com/GroupWareSolution
- Facebook: Nejen SW pro vaši firmu
- LinkedIn: https://www.linkedin.com/in/libor-svoboda-7b96014a/
- Eshop: https://GroupWare-Solutions.Eu
- Webové Stránky: https://GroupWare-Solution.Eu
- Online Module Doc Viewer Modul: Https://KlikneteZde.Cz
- Online Dokumentační Portal: Https://KlikneteZde.Cz/EIC&ESBdocs/CodeDocs
- Online Web Portal z Editorůl: Https://KlikneteZde.Cz/Portal
- Online MS System ESB: https://Kliknetezde.Cz:5000/
Úvod EIC&ESB-Globální IT Řešení na míru
EasyITcenter & EasySYSTEMbuiler - Globální Řešení vašeho IT Obecné Informace o Struktuře, vazbách a možnostech tohoto Unikátního Globálnho Řešení Celé oblasti IT až na malinké vyjímky.
Seznam nejprioritnějších Rozšíření Systému. Ty budou zaimlemetovány během 6 měsíců protože se tomu můžu věnovat jen ve volném čase. Nejen Itéčkáři v naší zemi se místo vzdělávání soustředí jak pěníze čerpat místo tvořit přidanými hodnotami své činnosti. Připraveno je jíž přes více jak 500 vylepšení. Stačí stahovat z Github.
Připravované Novinky,
Zde je seznam dalších chystaných funkcionalit, které posouvá vývoj.
To Hlavní Je přípravaWeb Portálu ONLINE s Vývojem kódu Mnanagovaným Centrálním Řešením.
to Nabízí Vždy aktializace po ruce Obosměrné rozšiřování Projektů a Centralizaci Agend.
Tím z tohoto řešení Bude Nejlevnější IT šeření Tak Rozsáhlého Charakteru.
- udělat 1x SP pro čištění zadaných tabulek agenda tabulek k čištění
DocServer
- Zprovoznit ExperDoc Editor a Viewer Pro Doc Server, potazmo pridat pravo zapisovat externistum
- VYTvořit AGendu Generování Dokumentace MD z Externích Zdrojů
- VYMYSLET Export Group/Menu SYSTEM do Dokumentace + Popisy s automatickou grafikou členění a rozklikem pro web
CHYBI cleneni grafické znázornení s popisy, vytvořit ze statickych nastroju jako Modul
- sjednotit template files a pridat typ, skupinu,
EasyITcenter
-
SERVER backendcheck bude nastavovat user is online, a system vytvořit chat s uzivately.
-
SYSTEM nastavit tooltip description i pro listbox
-
dodělat github
-
SYSTEM Generické Agendy Pro Uživatele bude vycházet z Dynamic API přes Universální Formulář bez nutnosti vytvaret formuláře - Pouhým Api a zaevidováním Vznikne nová Agenda
-
vytvořit remote konzoli na server pro moznost instalace a stravy online ze systemu
-
SPECHA udelat MikroWeby s moznosti + NODEJS.RUN a importit WEBY (GITHUB) ale uz zbuildene - BUDE NOVA AGENDA SERVER COMMANDS (s moznosti Startup) procesy v monitoru = AGENDA PROCESY SERVERU a moznost spustit runtime process s loginem Uzivatele a kdyz bude offline - proces shodim
- podle typu procesu trvaly - docasny -zvazit volby StartCommand/InstallCommand/BuildCommand
RESENI PRO REACT NATIVE Standalone WEB SERVERS na vlastnich portech (nastroj pro Check OpenPortu) = MULTI WEB SERVER Řešení
vytvořit Server agendu Process Task s možností on Startup a zapínáním a vypínáním online
- SPECHA Zaimplementovat Server Mod Provider a podminit WebPortal a Server Funkcionality Timto Nastavenim
- do scheduleru přidat scripty + startcommand [procesy ukladat do runtimelistu] Vytvořit Novou Agendu Scripty
-
- certifikát do složky server-web/certificate + script na generování pro LIN/WIN, AUTO zahrnout subdomény
- Zaimplementovat SSH
- dát SSH a FTP do plánovaných úloh
- dodelat sitemapu musí počkat na galerie/videa atd.
- Dodelat WebScrapScript a zaradit do nove agendy servers a takto se budou tvorit node, react atd, servery
-
- scripty portalu dat do lokalni tabulky - snizi pocet dotazu na DB
- Vytvořit monitoging volání API A dle toho přesunout tabulky do lokálních - API Statistika
EasySYSTEMbuilder
- SYSTEM udělat setting limit dataview 500, Ne pro číselníky , vyžádá si úpravu all api Get nepovinný lastcount,
- SYSTEM V datové přidat radek s inputy a multiselect Combo zobrazených dat pro filtraci v nastaveni pridat zobrazit filtry
- SYSTEM udělat panel utility
Ping, opět ports, terminál, cmd, srv cmd, SQL, JS,HTML, CSS, MD, C# pro rychlé testy funkčnosti, HTML+JS+CSS pro generátory + select framework pro auto definici knihoven a stylu,
Přehled runtime settings, tables, v nastaveni pridat on/off utility - SYSTEM udělat left float panel poznamky
- SYSTEM nova AGENGA WEBSOCKET ENDPOINT Aby si mohli implementovat cokoliv na webu a přidat systémový CHAT,
- SYSTEM SEHNAT LEPSI kalkulačku
- SYSTEM dodělat static files a přidat typy: framework, subdomain, userfiles, eicproject, eiclibrary, esbproject, esblibrary ,JSlibrary, CSSlibrary SystemSharedStore,WebTool,WebObject, WebPage, Typy budou agenda s nastavením verzovani, autocleanu or move do storehistory. Nesmí tam být 2x
ATD.... + automaticky verzovat soubory při uložení. BUDE TO GLOBALNI FILE STORE
- Centrální správa static files, zapínání verzovani pro typy, auto mazání old verzi, přesun old verzi do té lokální DB jako STOREHISTORYLOG s hromadnou operaci cleanu se zvoleným typem
-
Vytvořit Generátor dokumentace z Descriptions Vybraných řídících Agend jako hromadnou operaci
-
Vytvořit Globální Přepis Description a popisovaču slovo za slovo hromadná operace
-
vytvorit k Datapohledu Agendu Seznam Příkazů - Např zavolat /ServerCoreTools/UploadMarkdownFromUrl a uložit jako novou dokumentaci
-
dodělat vyhledávání ve všech DB dokumentacích pro Editory - Search Panel na listboxem Knihovny příkladů
myšleno hledám funkci a najde ji v několika knihovnách - zafiltrovat seznam -
RYCHLE udelat volani autorefresh DB->DOC - planovana Uloha
-
změnit názvy scriptů podle toho co dělají a vše co se vztahuje k dané funkcionalitě napsat v 1 scriptu nebude se to muset hledat a bude to na 1 místě SUPER, vytvořit náhledové okno u editorů pro zobrazení knihovny odebrat vkládání na konec. Globální Knihovna - už je ted WebLibrary VYtvořit Nové Menu "Knihovny" a přesunout tam DOC,WEB,CodeCopletion,Generátory ATD.
vše nasázet do globalscriptů a k tomu udělat nastavení info typu - Global-Only Page a druhý typ Anonymous-ROLE = Knihovny API, Generátorů, Objektů, Funkcionalit, Toolu, CSS, to lze pak vyuzit jak u portalu tak u static pages.
- HYPER vymyslet automatické přidání parametru výška řádku systému a automaticky přidat nastavení do kódu ADD) přidat: Nastavení Výchozí řazení Tabulek podle sloupců jako lokální Tabulku a API Requesty řadit dle nastavení s Uživatelem Null nebo Vybraným pro možnost nastavit to uživateli rozdílně mimo Parametry Systému
jinak tento parametr, nebo seznam parametrů by mohl být definovn v menu a daný form už by jen poslouchal a plně dynamicky nastaví něco[object with name] - parametrem (začít tvořit SYSTEM Generator)
ANO rozsirit Nastaveni tabulky o VYSKA RADKU (plus projit parametry) + SubAgendu Pole - kde nastavi format, zarovnani, a teoreticky by mohl Vygenerovat Formular i CS kod a dat ke stazeni DO ESB pro zalozeni noveho FORM pri zavadeni Tabulky Do Menu zde jiz jen stazeny kod editovat v nastrojich zda je ok a vlozit do projektu
RESENI AUTOMATICKEHO GENEROVANI AGEND V SYSTEMU
- HYPER zalozit Agendu Vyznamova/casto hledana slova pro Agendy jako ja si pisu v tascich SPECHA/HYPER jako ciselnik ukazatelu.
staci jednoducha tabulka s informacemi uzivatel/agenda/slovo
-
- Nastavení Globálních Stylů Systému pro Jednotný Vzhled bez nustnosti nastavování.
- Rozšířit Volby Nastavení Vzhledu např sudé/liché řádky Datapohledu v Selection Barvě
- System Vytvořit Datagrid Context menu - obshlahnout ze swap Builder E:\Projekty\MyGitHub\FreeProjects\LocalDB-MSSQL-IS-System-Generator
- vytvořit generator InfoTouchApp (možno i maui verzi pro mobily) se zobrazením jednoduchých html stránek s group/menu strukturou plus sipky tam/zpet menu = resení pro infopanely viz radnice panel
pro Generování Dotykových Panelů
KLON
- vyzkoušet konverzi xaml->html a system prenest na html Tak by se dal zkonvertovat celý Stávající Systém do Webu
- Vytvořit Generátor Update Obsahu Databáze se selectem tabulek a polí pro náhradu slov = Hromadná Operace
EIC&ESB
-
aplikovat implementovane Updaty celem rozsahu Projektů, Styly, Šablony VS Existující Agendy, Upravit Filter na Auto Search Text Type
-
dodělat dynamicke API z SQL
-
Vytvořit agendu Nastavení k Docs, styly s uploadem, linky
-
TODO slozky upravit na browsable, allowedOpen in browser, must be authorized Nova agenda TODO slozky upravit na browsable, allowedOpen in browser, must be authorized = SLOUCENA - Rozsirena agenda Browsable Path o Multiple Auth Role ci minimalni Uroven,Ignore for StaticTools(app.Use) = Resi Startup a pridelovani Globalnich nastroju
Auth se da blokovat i Moduly jako ServerApi - proverit duplicitni Aplikaci
-
Galerie - Typ Video/Audio/Image/Other - + IMPORT/EXPORT hromadne operace Odložit Možná Bude Řešit StaticWebStore staci Agenga/Upload/Download + nastavení APi pro vyčet - Šablony Generátorů
-
upravit hromadné operace - Typ Export/Import/Operace pro moznost I/O poli, datapohledu/html/
SystemOperation, pridat inputtype [none,int,bit,table,json,etc.], inputdefinition[name,tablestructure], a kdyz bude zobrazit generic popup pro vyplneni - pro operace se vstupy atd
-
SPECHA Vytvořit a publikovat úkolovník NEWS Chyby jeste Generovani NEWS/Úkoly/ChangeLog do Dokumentace
-
nová agenda controling - dynamické SQL + předpřipravené GrafFormy pro vlastní definice pohledů
-
vytvořit Agendu osobní parametry uživatele - dynamický formulář zde si vybere zasílat zprávy atd, paramtry zadá správce v nové agendě s typem parametru - mixed enum + copy dynam param form, funkce link, email web atd - hosting
Agenda Parametry k Výběru = Zaimplementované Funkcionality Možnost Definování Vlastních Parametrů Pro Web = Key/Value
- sehnat sql convert to jiných typu sql
- Dodělat Ovladání Subserverů z Administrace
Provider
-
Vytvořit agendu napoveda kodu s vlastnimi castmi kodu - codecompletention
-
přidat Nástroj/Role zda Auth či Guest a Generovat Panel Nástrojů - Bude Součástí Dashboard Vývoje
-
scaffolging přesunout do prázdného projektu pro DB [bude z něho regenetate Projekt] - řeší RYCHLOST přidat tam i moznost klientskych Generic DB a pouzivat jej jako Centralni Scaffold
-
HYPER nová agenda TableBuilder - Rozšíření DB + vygenerování kódu API jen s volbou šablony (stále ta 1 RESTFULL, že )
-
Generovat Licence pro Založení Webu, po Vypršení se web smaže
-
Vymyslet stahovani předloh stranek v html completu: https://www.creative-tim.com/ tyto pak stačí zeditovat a jede se Bude Součástí Licence a Webu
-
Nabídnout moje projekty githubu včetně předchopzí verze System generatoru SwapBuilder
-
vytvorit zobrazeni struktur serverDbDiagram projekt a jejich rozpadů logiky pomoci CodeAnalysis a Statické knihovny diagramů
-
pridat pole globalversion, customversion, solution(licsrv,docsrv,) a vytvořit, migration procedure která vyzobe rozdili, uloyi script do DB, povysi verze, upozorni na custom, tzn jeste migracni tabulky pro kazdeho klienta
-
vytvorit rozpis struktury databáze a editor s volbou tabulek, s funkcí přidat nové pole - celá migracni logika rizena ze systému musi vzniknout rizeni rozvoje databáze
-
Zařídit Azure Server a Přestěhovat řízení projektů na rychlé datové úložiště
-
LayerJS Zoom umi nahledy html stranek a zoomove je otevre Zaimplementovat Do Noveho Portalu rizeni projektů
-
SYSTEM Přenastavit seznam IT Nástroje a Manuály - Vypublikovat na Web v Novem Desktopu
StaticWebStore
- Routingem muzu treba image nebo html file nebo cokoliv poslat do takoveho layoutu ktery v sobe bude mit editor a nacte si dany soubor sam a tak muzu udelat staticky html editor pro subdomain file Statické Nástroje budou mít pevnou Routu a otevírat a ukádat budou přes StaticFileStore Requesty = Tvorba interaktivních nástrojů Webu - Implementace Popup Html Editoru atd..
- Ke scriptům udělat možnost zadání názvu nástroje a podle toho natahovat CSS a JS = Budou Staticke Vsechno -> udělat něco jako INIT a ten zkontroluje jestli je načtený popř ho načte = JINAK Vytvorit nastroj HLEDAT v JS/CSS třeba tridu - v dostuplnych podle Role a nabidnout k nacteni neexistujici CSS tridu nezdetekuji
WebPortal
- při načtení websettings uložit Datum načtení a vytvořit nový parameter jak často Refrešovat
- lepší zaznamenavat TablesLogLastUpdate Pro vybrane TBL(agenda) a web se mrkne a dle toho si refresne dlouhodobe datasety - a nebo toto udelat pres centralni WebSocket = vytvorit Web knihovnu WebSocket
- SPECHA opravit volání API z web Editorů a editor přenést do WebAdmina Narovnat nastaveni Webmenu po odebranych nastrojich
a opravit kolizi TooList Variable
Když nikdo neocenil 400 nástrojů vygenerovaných na jediné stránce
-
- designer JS+CSS taky udělat s výběrem jako u knihovny a překlik
-
Upozornit že má neuložené změny před Změnou na jinou Položku
-
pro portal, zalozit agendy web backroundvideoList + option zvuku, mp3list
WebServer
- Přidat Novou Agengu: HTML Generátory: a v knihovně nachystat generování různých typů HTML bude i nástroj při tvorbě Statických webů, prezentačních stránek, statických stránek, Přehledů, dokumentace, partnerská příprava dat
ideálně 1 API volající HTML i JS část z šablony např metro, tím je dáno CSS a bude tam zacílení na název tabulky tím to vrátí Data a centralizovaná šablona HTML - dlaždice, nebo combobox, takže tabulku+(pole: id,name,desc,link,icon,timestamp)+šablonu HTML/JS - takže vytvořit HTML/JS agendu šablony a globální funkci, která z toho vytvoří generátor Webu.
možná by stačil jen našeptávač šablon z Universal Editoru
- Udělat sloučený Export vybraných knihoven jako StartuUp Script CSS
v návaznosti na existzující static nástroje, knihovny , frameworky, atd, ze kterých si složí nový static web či Šablonu pro portal???? - musi počkat na dynamické šablony - Prenest Sablony Html Souboru z Razor do Agendy pro uplnou spravu - Dynamické CSHTML Šablony
- zrusit agendu includovane scripty ze sablon, - budou si udrzovat sablony
- takto: vytvořit agendu nastroju a k nim templaty v ni budou i editory a nastroje
- Kazdy Layout bude mit svoji Page a to bude platne i pro portaly
- PS: portalum dat index znacku a dovolit jich neomezene A k nim Sablony Stranek a tak pujde delat nastroje s Menu Atd, vazba musi byt zapsana v nich Ukladat je stejne jako portal scripty jsou potreba pro build serveru = dynamicke programovani
-
import scriptů ze souborů do DB / export scriptů z DB so souborů - hromadná operce bude v Agendě Správa Statických Nástrojů ATD
-
GUEST Okno HTML + JS + CSS at si vyzkousi skladat stránku s možností Exportu Galerie atd
-
Web CodeControl bud vyuzit nejaky nastroj JS jak mam pro C# a generovat ListLog Promenych - U portalu s nastavenim Object Reload Davat vse do Try nevo analyzovat Let/Var/Const Name
-
Udělat zálohování scriptů/ Import Složky muze byt Soucasti History Logu do LocalDB
-
JEDNODUCHE Export Web Reseni mit moznosti jako Normal či Minify
-
StaticWeb i MultiWebServer by mohly mít direct Clon z Githubu Otázka Bordelu node-modules - snad příkaz pro smazání.
Ideálně Podporovat pouze Statické Weby, nevracet se omezenému buildu se stejnými funkcemi
- ke každému subdomain website moznost zalozit localDB co je nachystany
- Napsat Dokumentaci Webu STATIC TECHNOLOGY s možností vyseparovat libovolnou funkcionalitu a kdekoliv kdykoliv nasadit online
Úvod EIC&ESB-Globální IT Řešení na míru
EasyITcenter & EasySYSTEMbuiler - Globální Řešení vašeho IT Obecné Informace o Struktuře, vazbách a možnostech tohoto Unikátního Globálnho Řešení Celé oblasti IT až na malinké vyjímky.
Seznam a popisy automatických funkcinalit a pravidel, nakteých stojí bezobslužnost spousty jinak nutných úkonů při vývoji. Tyto pravidla zajišťují Velmi snadný a rychlý vývoj
EASY-SYSTEM-Builder & EASY-DATA-Center & Visual Studio Help
OS GIT WINDOWS LINUX MARKDOWN DOC SCHEMA DATABASES
- target of the new Groupware Solutions is set Maximal processes to this automatic solutions.
- Result Will Be: Create Table and Set API Template - its Done for DATABASE and Backend API
- Create Form from Templates In FrontEnd for the New Table - Its Done for New System Form (Agenda)
- Share With World : World will share Agendas with you also
- Agenda is Only 3 files: SQL(Table), API, FORM
- Ideal Copy Class from generated By Scaffold to final Form
- Its Absolute Perfect Solution For EASY Create Robust System in Few Months
- All Systems Supported: Machines Control, IS Systems, Terminals, and All Sub Systems
Databáze Pravidla
- Pojmenovávání a pravidla pri tvorbě databáze
- zajišťují snadný přenos sktuktury od DB dat přímo k Formuláři
xxxList - Tabulka braná jako Systémová promítá se do:[Api,AppMenu,Tisky,]
xxxSupportList - Tabulka podřízená nepromítá se do [AppMenu,Tisky] ale má API
Visual Studio Automatic MD File From XML Comments
- Install 'Vsxmd' Library
- add this code to 'PropertyGroup' in project file setting
<GenerateDocumentationFile>True</GenerateDocumentationFile>
<DocumentationMarkdown>$(MSBuildProjectDirectory)\Golden.md</DocumentationMarkdown>
Visual Studio Automatic Code Cleaning
- Install 'codemaid' Tool
Visual Studio Automatic DataBase Schema Snapshot
- Install 'EntityFrameworkCoreScaffolding' Tool
- Use Example file 'scaffoldingsettings.json' for OneClick Snapshot
GitHub Automatic MDBook
- Enable 'MDBook' tool For Code
Use File: book.toml
GitHub/GitLab Automatic Publish to GCloud Docker
- Enable Build
Use File: Dockerfile
GitHub/GitLab Automatic Publish to GCloud Docker
- Enable Build
Use File: gitlab-ci.yml
Linux Create Backend System Service for Automatic Control
- Read OS support
Use File: Linux-dotnet-MyProject-service.service
Windows Install application.exe as System Service for Automatic Control
- Read OS support
Use File: install.bat
Visual Studio Automatic Generate windows Help File chm
- Install 'GhostDoc' tool
- Run on Project for Generate Full Code COmment and Structure Help file
MSSQL DATABASE Automatic BACKUP/RESTORE
- Use files from MSSQL_DB
- Can run from System Scheduler
- Can Run from SQL command
Backend WebPages Automatic Controller from Pages Structure
- Enable Razor WebPages Engine
- Create new file 'cshtml' in folder ServerCorePages
- Page is automatic included to Controller !must we different than API URLS
Cloning Database Schema To More instances from One Source FOR using
- Test / Dev / Sharp instances
- more Branches
- New Cloned System
MarkDown Item Template
Úvod EIC&ESB-Globální IT Řešení na míru
EasyITcenter & EasySYSTEMbuiler - Globální Řešení vašeho IT Obecné Informace o Struktuře, vazbách a možnostech tohoto Unikátního Globálnho Řešení Celé oblasti IT až na malinké vyjímky.
Zde jsou Globální kódy a funkcionality pro Centralizované používání
DATABASES on Modern way - finally
One Command and One Database in Project, never less - its my new Idea
Possible DB Technologies for immediately using by start click only
ALL MAIN DATABASE TYPES IN Golden by EF6 (entity framework) are supported
ORACLE
MSSQL
MYSQL
POSTGRESQL
SQLITE
DB2
etc
SHARED PROJECT FILES
MSSQL EASYBuilder DB installation script
MSSQL ENGINE HELP COMMANDS AND TYPES
#Run stored procedure for Backup Database via MSSQL user login
sqlcmd -U ,username -P password -S .\SQLEXPRESS -d DatabaseName -Q "EXEC DB_BACKUP"
#Run stored procedure for Backup Database via Windows Login
sqlcmd -S .\SQLEXPRESS -d DatabaseName -Q "EXEC DB_BACKUP"
#Recovery Database via MSSQL user Login and set Right for Database by running stored procedure 'DB_SETRIGHTS
sqlcmd -U username -P password -S .\SQLEXPRESS -Q "ALTER DATABASE [LICENSESRV] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;RESTORE DATABASE [LICENSESRV] FROM DISK = N'C:\Database\DEFAULT_DATABASES\LICENSESRV.bak' WITH MOVE N'LICENSESRV' TO N'C:\Database\LICENSESRV.mdf', MOVE N'LICENSESRV_log' TO N'C:\Database\LICENSESRV_log.ldf', FILE = 2,RECOVERY, REPLACE, STATS = 10;ALTER DATABASE [LICENSESRV] SET MULTI_USER;"
sqlcmd -U username -P password -S .\SQLEXPRESS -d LICENSESRV -Q "EXEC DB_SETRIGHTS"
DATABASE Templates and System Rules COPY/PASTE/RENAME supported
For thinking, the development of tools and work with them worthy in the 21st century
- The displayed template codes can also be found in the Database
- Make the database model as honest as possible in relation to data and bindings
- The best solution is to have the database check the correctness of the data (in 1 place)
- The database contains a DBHELP help procedure
- Document items are deleted with a linked key
- Procedures for Backup/Restore are prepared in the DB
- The system uses SLQ, EF6, Procedures, Views, Functions
- That's all it takes to discharge
-- The procedure setting the rights for the user to the necessary operations
USE [EASYBUILDER]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE procedure [dbo].[DB_SETRIGHTS]
AS
BEGIN
BEGIN TRY CREATE USER [easybuilder] FOR LOGIN [easybuilder] END TRY BEGIN CATCH END CATCH;
BEGIN TRY ALTER ROLE [db_datareader] ADD MEMBER [easybuilder]; END TRY BEGIN CATCH END CATCH;
BEGIN TRY ALTER ROLE [db_datawriter] ADD MEMBER [easybuilder]; END TRY BEGIN CATCH END CATCH;
BEGIN TRY GRANT EXECUTE TO [easybuilder]; END TRY BEGIN CATCH END CATCH;
END;
GO
/*
Template for creating standardized Tables (from Table -> CREATE TO)
The template is used by way of REPLACE 'TemplateList' after 'NewTableList'
edit fields correctly, set indexes and foreign keys
System ID Columns - AutoIncrement, TimeStamp - InsertTime
Keys: UserId - Binding to the UsersList Table
*/
USE [EASYBUILDER]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[TemplateList](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Name] [varchar](50) NOT NULL,
[Description] [text] NULL,
[Default] [bit] NOT NULL,
[UserId] [int] NOT NULL,
[Active] [bit] NOT NULL,
[TimeStamp] [datetime2](7) NOT NULL,
CONSTRAINT [PK_TemplateList] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY],
CONSTRAINT [IX_TemplateList] UNIQUE NONCLUSTERED
(
[Name] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE [dbo].[TemplateList] ADD CONSTRAINT [DF_TemplateList_Active] DEFAULT ((1)) FOR [Active]
GO
ALTER TABLE [dbo].[TemplateList] ADD CONSTRAINT [DF_TemplateList_TimeStamp] DEFAULT (getdate()) FOR [TimeStamp]
GO
ALTER TABLE [dbo].[TemplateList] WITH CHECK ADD CONSTRAINT [FK_TemplateList_UserList] FOREIGN KEY([UserId])
REFERENCES [dbo].[UserList] ([Id])
GO
ALTER TABLE [dbo].[TemplateList] CHECK CONSTRAINT [FK_TemplateList_UserList]
GO
/*
System procedure for Reports with advanced Filtering
The procedure is part of the Supplied Database
*/
USE [EASYBUILDER]
GO
/****** Object: StoredProcedure [dbo].[ReportDataset] Script Date: 11.03.2023 6:45:06 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[ReportDataset]
@TableName varchar(50) = null,
@Sequence int = 0
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Intended for use with param-ed reports.
-- To be called from various My-FyiReporting reports
-- - Various reports with their own layouts are called from VB app after setting Queue with usp_ReportQueue_Push()
-- each report then just contains :
-- SET FMTONLY OFF;
-- EXEC usp_ReportQueue_Pop @TableName='SomeTablename', @Sequence='10'
--
DECLARE @ID int;
DECLARE @NAME varchar(50);
DECLARE @SQL nvarchar(MAX);
DECLARE @FILTER nvarchar(MAX);
DECLARE @SEARCH varchar(50);
DECLARE @SEARCHCOLUMNLIST nvarchar(MAX);
DECLARE @SEARCHFILTERIGNORE bit;
DECLARE @RECID varchar(50);
DECLARE @RECIDFILTERIGNORE bit;
DECLARE @SEPARATEDCOLUMNS nvarchar(MAX);
SELECT Top 1
@ID=[Id],
@NAME=[Name],
@SQL=[Sql],
@FILTER=[Filter],
@SEARCH=[Search],
@SEARCHCOLUMNLIST=[SearchColumnList],
@SEARCHFILTERIGNORE=[SearchFilterIgnore],
@RECID=[RecId],
@RECIDFILTERIGNORE=[RecIdFilterIgnore]
FROM ReportQueueList WHERE [TableName]=@TableName AND [Sequence] = @Sequence;
--PRERARE RECID
IF (@RECID = 0 OR (@RECIDFILTERIGNORE = 1 AND @FILTER <> '1=1')) BEGIN
SET @RECID = ''
END ELSE BEGIN
SET @RECID = CONCAT(' AND Id=',@RECID);
END
--PRERARE SEARCH
IF (@SEARCH = '' OR (@SEARCHFILTERIGNORE = 1 AND @FILTER <> '1=1')) BEGIN
SET @SEPARATEDCOLUMNS = '1=1';
END ELSE BEGIN
SELECT @SEPARATEDCOLUMNS = STRING_AGG (CONCAT(value,' LIKE ',char(39),'%',@SEARCH,'%',char(39)), ' OR ') FROM STRING_SPLIT (@SEARCHCOLUMNLIST, ',');
END
SET @SQL = CONCAT(@SQL,' WHERE 1=1 AND (', @FILTER,') AND (', @SEPARATEDCOLUMNS,') ',@RECID);
--PRINT @SQL; --FOR Debuging
EXECUTE sp_executesql @SQL;
END
GO
--SQL Trigger pro Tabulku pro nastavení jediné hodnoty u typu 'Default'
USE [EASYBUILDER]
GO
/****** Object: Trigger [dbo].[TR_UnitList] Script Date: 11.03.2023 6:48:06 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [dbo].[TR_UnitList] ON [dbo].[UnitList]
FOR INSERT, UPDATE, DELETE
AS
DECLARE @Operation VARCHAR(15)
IF EXISTS (SELECT 0 FROM inserted)
BEGIN
DECLARE @setDefault bit;DECLARE @RecId int;
SET NOCOUNT ON;
IF EXISTS (SELECT 0 FROM deleted)
BEGIN --UPDADE
SELECT @setDefault = ins.[Default] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].UnitList SET [Default] = 0 WHERE Id <> @RecId;
END
END ELSE
BEGIN -- INSERT
SELECT @setDefault = ins.[Default] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].UnitList SET [Default] = 0 WHERE Id <> @RecId;
END
END
END ELSE
BEGIN --DELETE
SELECT @setDefault = ins.[Default] from deleted ins;
SELECT @RecId = ins.Id from deleted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].UnitList SET [Default] = 1
WHERE Id IN(SELECT TOP (1) Id FROM [dbo].UnitList WHERE Id <> @RecId)
;
END
END
GO
ALTER TABLE [dbo].[UnitList] ENABLE TRIGGER [TR_UnitList]
GO
MarkDown Item Template
Úvod EIC&ESB-Globální IT Řešení na míru
EasyITcenter & EasySYSTEMbuiler - Globální Řešení vašeho IT Obecné Informace o Struktuře, vazbách a možnostech tohoto Unikátního Globálnho Řešení Celé oblasti IT až na malinké vyjímky.
Seznam Implementovaných Nástrojů , modulů, řešení třetích stran. V konfiguracích je použito s bídou 5% možností daných nástrojů. Prodalší rozšíření jsou zde Odkazy na Dokumentace Daných Nástrojů. Pro Automatický Překlad Si stáhnetě dokumentaci do Statického úložiště a nasaďte Modul Automatického Překladu.
EIC Implementované Moduly
ESB Implementované Moduly
Úvod EIC&ESB-Globální IT Řešení na míru
EasyITcenter & EasySYSTEMbuiler - Globální Řešení vašeho IT Obecné Informace o Struktuře, vazbách a možnostech tohoto Unikátního Globálnho Řešení Celé oblasti IT až na malinké vyjímky.
Changelog jsem začal prat teprve ted. Každý úsek který vidíte, je výsledkem 2dnů práce macimálně.
Pro představu co vše se dá zvládnout. Vyzkoušejte nebo požádejte o instalaci u vás ve firměš či doma a zkuste
vyzkoušet vo vše dané řešení nabízí.
Zpracovávané a zpracované Funkcionality,
Zde je vypsána ani setina toho co vše Dané projekty Umí.
Myslím že chystaný vývoj Online z Webu a Editorů mluví za vše. Tak neplýtvejte financemi na
čas zaměstanců či jiná řešení A Vyzkoušejte 30 denní verzu zdarma.
EasyITcenter
Hotovo
- udělat agendu emaillogger
- Hotovo Loguje se do SolutionFailListu když je zapnutý Server Parameter ConfigLogWarnPlusToDbEnabled
EasySYSTEMbuilder
Hotovo
- SYSTEM pro enumy udělat tabulku kde skupina BUDE jen text - takto to půjde spravovat jedna tabulka pro všechny enumy
- SUPER ŘEŠENÍ - už jste někdy viděli? Vyřešeno Agenda MixedEnumList spravuje Všechny male číselníky s popisy Významů/návodů jednotlivých Voleb Ty slouží zároveň jako automatická ToolTIP nápověda při vybírání ze seznamu
EIC&ESB
Hotovo
- Aktualizovat Dev News
- Vyřešeno Task Agendou a generováním Úkolů A jejich Stavů plněním do Dokumentace Hromadnou Úlohou
Hotovo
- jednou provždy opravit TimeStamp Timestamp na TimeStamp
- Vyřešeno, všechny nazvy se nove kontroluji vsechny .ToLower().
Hotovo
- Řešení SourceBrowser - upravit projekty, zaimplementovat, vygenerovat kódy a nasadit jako code documentace
- Hotovo. Nyní součástí nového Portálu na API /EiC&ESBCodeBrowser/index/index.html
Hotovo
- Prenos Historie zmen z Doc Agendy do Task Agendy
-
Projects Legend
ESB = EasySYSTEMbuilder
EIC = EasyITcenter
SD = EASYBuilderDataCenter SP = EASYBuilder application I = Install file DB = Database
Každá změna v EB/SP může být nasazena do druhého programu
Každá změna IN ED/SD může být nasazena do druhého programu
Instalační soubory projektu/programu jsou pro naprosto jednoduchou instalaci se všemi závislostmi Dokumentaci a software pro testování najdete na
https://groupware-solution.eu/webdav/Marketing/ přihlášení: marketing/marketing
VŠECHNY aplikace připraveny pro jednoduchou instalaci / Koupit více typů instalace - podle uživatelsky přívětivého instalačního souboru a licenčního serveru
Aplikační klony FE + BE
LicenseSrv - MultiOS licenční server s nasloucháním API GET/POST server / generování
Neomezené statické/dynamické KÓDY a klient pro správu
PRŮVODKY - Implementace Windows XP+ Výrobní příručky pro produkční společnosti
Pro kancelářské / dotykové panely s neomezeným počtem klientů a možností tisku
ShoPingER - Windows XP+ MultiBranch Nabídka/Objednávka/Fakturační systém s multimediálními soubory
Podporováno s neomezenými klienty a možnostmi tisku
LicenceShoper - MultiOS License Server PLUS Windows XP+ MultiBranch Fakturační systém
[LicenseSrv + ShoPingER]
ŘEŠENÍ HLAVNÍ DÍLY
EASYBuilder vyvíjí projekt C# WPF Visual Studio s nastavením nabídky MustiVariable,
Se všemi typy šablon datových formulářů DATAView / DATADetail / With SubDATAview /
S SubFullDataDetail / 3D / Dokument / Video
pro sestavení JAKÝCHKOLI informačních / multimédií / řízení / toku / podávání zpráv a dalších systémů
PRO DALŠÍ VÝVOJ KOPÍROVÁNÍ / VLOŽENÍ ZA EXTRÉMNĚ NÍZKOU CENU 5000Kč/200EURO - LICENCE projektu
Golden - Univerzální bezpečný multiplatformní projekt backendového serveru MultiDATABASE
S implementacemi RESTFULL / WEBSOCKET
Se všemi typy šablon pro INSERT / UPDATE / DELETE / SELECT /
PROCEDURE / SUBFORMDATA a další Jiné
S DATABÁZÍ, šablonou tabulky, šablonou procedury, šablonou zobrazení,
Zálohování/obnovení a další příklady
S tabulkami, indexy, cizími klíči ve všech standardních DB
PRO DALŠÍ VÝVOJ KOPÍROVÁNÍ / VLOŽENÍ ZA EXTRÉMNĚ NÍZKOU CENU 5000Kč/200EURO - LICENCE projektu
FYI Reporting - FreeWare Full Report Designer a Viewer pro tisk všech typů dokumentů
/ Čárové kódy, EAN, QR, grafy, dílčí sestava atd.
SW Date Version Speed Development Description by one man Only
EB/SP/I 1.12.2022 1.5.78.925 Start of Developing steps describing
EB 1.12.2022 Added Link for FyiReportink 100 Examples to
Help_Commands
EB/SP/I 1.12.2022 1.5.78.944 Implemented DB Connection string to settings for All
Report as param, centralized
EB/SP 1.12.2022 Implemented new TreeView Menu for much more menu
items in Menu
SD/SP 1.12.2022 Implemented CurrencyList, UnitList, AddressList
ItemList Agendas
EB/SP 1.12.2022 Implemented Copy menu button for copy Each record in
listview
SD 1.12.2022 Describe existing API call to documentation
EB/SP 2.12.2022 Changed Settings for much more application menu Types
and implemented new Menu
EB/SP 2.12.2022 1.5.78.954 Publish new version EASYBuilder installers on
Google/WebDav/WebSite
EB/ED/SD/SP 2.12.2022 Publish Development Info on WebSite And Marketing
EB/SP 3.12.2022 Repaired filtering on null values
EB/SP 3.12.2022 Centralized load Report List Control from ApiUrl
definition List for these addresses
SD 3.12.2022 Create TemplateList Table
to 15.12.2022 5 Applications Created IN 14 DAYS WITH 20-40 DB
tables / Agendas in ONE MAN ONLY
2023.07.07 FAST REcapitulation
Exist Few Tasks For Better Settings Maily for EASY SYSTEM BUILDER (SET Full Automatic Translating for Example) But Yesterday Will Be Regenerated Older EDC & ESB Clones Over Automatized Solutions.
EDC now MULTI Server (GroupWare Solution) Has Own System Clone As Basic Server Manager - Any Interest of This Solution (its not normal) Server for Testing With Posible FUNCTIONalities most Than commercial Products I have Problem Find Normal Work as alone Developer
So in Week Will start The EASY-DATA-CENTER (Backend API from Start, but now + Media,Multi Web,FTP,Socket,DOCs,Emailing,HealthCheck, etc With Absolute News In WORLD) example: Remote Monitoring internal logger of Server over WebSocet, Automatic Translation Table Filler by First World Using in System and much more
So News Are In Video, New Full Agenda from DB to System is Finished in 5min - Copy Similar To 5 Hours - Complicated for More Joing Example OCR for Max 2 Days For Implmenent almost perfect Solution for HTML Editing with Allmost HTML shits and Fails in Format.
Perhaps Severu's Media Backend Generator, which will generate a RESTFUL API with a lot of other benefits, will awaken interest and I will finally find clients instead of mocking that I can't do IT.
PS: i Start IT on ATARI 65XE in 1989 and this Year is 33 Years from My First Program Code.
So Recap Solutions By Videos I Found Plan Implement Automatic LetsEncrypt for Server, Gihub Custom Server, cheap EDC Server Generator, Next Few cheap Generator which i build on this Way, ESB Generator, XAML Form Builder for EASY Build System By Clicking on Mouse.
05.12.23 Globální Změny
Vznikla první agenda s automaticky překládanými poli
Úkol, aktualizovat všechny existující aonliner agendy na automatický překlad
-
Automatický Překlad sbírá pomocí funkce "TranslateFormFields" všechny Popisky-LAbel typy a Button Tlačítka Typy a překládá je oproti DB překladovému seznamu
-
Odpadá nutnost vupisovat typy polí
-
POZOR toto je možné jen preo ONLINE AGENDY seznam je načítaný ze serveru
-
Další Varianta Překladu je pomocí ruční definice popisku z názvu
-
použije "fileType" pro překlad *DBOperations.DBTranslation(lbl_fileType.Name.Split('_')[1])
nebo přes lokální Slovníky "Languages" pro použití OffLine
- lbl_fileType.Content = Resources["fileType"].ToString()
-
Menu je Celé kromě volby Nastavení Klienta zmeněno na automatický překlad DB slovníku
-
Odpadá nutnost kvůli nové online agendě importovat slovníky
-
Slovníky lze Generovat z Backendu a Vložit Do projektu Systému pro Offline Použití
-
Použité Jazyky CS,EN, neomezená možnost jednoduchého rozšíření Lang Tabulky
Starší Zápisy
Změny ve volných chvílích při zaměstnání 12.2023 - Nestačím Zapisovat https://KlikneteZde.Cz 30.12 Generic API , nyní stačí registace názvu nové tabulky do příslušné Skupiny Dle Práv 29.12 Agenda Dynamické Moduly a Služby [custom HTML/CSS/JS API moduly] + Sekundární Zabezpečení API 28.12 Připraven Interface pro DBWebStatic FileStructure 27.12 Agenda Static WebSites - další webstránky na subdoménách url://website.domain.xx nebo url://domain.xx/website 26.12 Agenda Operace Systému - DB SP operace, Import/Export/Backup/Clone/Generate Docs/Generate DB Object atd.. 24-27.12 STATIC WEB Studio https://kliknetezde.cz/server-web/static-web-studio/ - prezentační fáze pro Global Administrátor 23.12 Předělána Agenda ServerSetting do Dynamic Form, nová nastavení automaticky přiskočí
9.1 po změnách Změna Klient Setting na Generic Form + MultiSameTab + MultiInstanceCloneByDrag
09.12.2023 ESB - Implementován SystemMenu ToolTip Dle Param nastavení, zobrazen Popisek menu ESB+WEB - Imlementována Agenda Správa globálních HTML, a Finálně převeden Layout do DB správy Web je Nyní Plně v Režii DB a je Skládán z částí HTML Globální + Stánka z Editoru dle Práv v nastavené sekvenci
19.04.24 Globální Změny
- částečné narovnání FulText Dokumentace
- Vytvoření Agendy Úkoly a Zápis všech poznamenaných Cílů
- rušení angličniny v dokumentaci, vracení do CZ, Je Překládána Automaticky
Provider
Hotovo
- kompletní dokumentace a zobrazeni mermaidů, pro Server, System, DB, WEB static tools, webFunctions Library-API-behavior-object atd, s popisi , rozložením, atd..
- Hotovo Nový Dokument Portal s Auto Překladačem veškerého Obsahu. Nyní jen Dopsat a Udržovat v Administraci
WebPortal
Hotovo
- každý script by měl mít části guest/webuser/admin/provider aby se načítaly jen ty správné
- Zaimplementovano Dle pozadavku ve SPA Stránce WebPortálu
Metody Přírustkové, nebo Přepis, Provider se natahuje vždy
WebServer
Hotovo
- udělat třídu co doplní ikonu COPY a PRINT zaramuje objekt
- Vyřešeno Globalni Funkce, Copy/Print/ExportAsHtml/ExportAs Image/ExportAsPdf
Hotovo
- minifikace JS/CSS bude operace nebo ať ti to udělá sám
- Vyřešeno Nastavením Minify WebPortal Se provede pro Static Existuje MinifyApi
Hotovo
- zkusit zaimplementovat astnetstatic pro export webu jako staticky i s daty a vyexportovat soucasny portal
- Už netřeba WebPortal, všechny Doplnky, nástroje, Tooly, UI, Frameworky, Dashboardy jsou plně statické. Stačí Obyčejné vykopírování Souborů
Database
Provádí se
- Projít DB a dodat do všech/vybraných tabulek description - Slouží jako Auto help pro systém i generování webu
EasySYSTEMbuilder
Provádí se
- SYSTEM sjednotit APP konfiguraci jako na Backendu
Provádí se
- SYSTEM v nekterych setrecord - Chybi TRY chatch
Provádí se
-
- v systému řešení tooltipů, vyzobat všechny descriptiony k záznamům, nadřazených skupin atd, a osnovou je vyskládat, a vlevo nahoře pridat ikonu INFO
- Opravit zobrazení jen pro aktuálně zobrazené okno, zobrazuje ToolTipy i ostatních otevřených Oken
-
- Hotovo. Ikona ShowAllToolTips Zobrazí Všechny Nápovědy definované v Otevřených oknech
WebPortal
Provádí se
- přidat do stránek OpenDocView jak je na Nomadu
Chybí vazba na WebMenu + ikonka Fixed, top, right pro zobrazeni
- Agenda WebInfoPanely jsou Panely pro návody jednotlivých WebMenu
WebServer
Provádí se
- Založit a naplnit JS Knihovny:
-
Funkce
-
Objekty
-
Generátory
-
Knihovny
-
Nástroje
-
Úložiště
-
ObjektControllery
-
Okna
-
Panely
-
Stránky
EasySYSTEMbuilder
Vylepšování
-
- zapnout možnost otevřít 1 okno vícekrát, rozdělit do více instancí
- Přesunout nastavení Do parametrů ať cestuje s uživatelem
- Hotovo volba nastavení Systému umožnuje otevřít stejné okno vícekrát, pro možnost dívat se na jiná data.
EIC&ESB
Vylepšování
-
- Převzít hotel HTML messaging, přidat changelog,
- Vytvořit Knihovnu pro WEB
- Přidat group-users-blog,Task Request-Blog,Rss-News,Web-Socket Messaging, Web-Socket Blog
-
- Převzato v Systému, Novinky, Blog, Privatni zprávy
WebServer
Vylepšování
-
- vytvořit layout s překladačem a modulům dát možnost volby layoutu
- Vytvořit InjectPages pro nastroje, ktere si soubor nacitaji sami, tim neodpovi static Web ale nastroj
- Hotovo Vytvořen Modul /PrintPageModuleList kde Preklad je Vygenerovan Scriptem
Úvod EIC&ESB-Globální IT Řešení na míru
EasyITcenter & EasySYSTEMbuiler - Globální Řešení vašeho IT Obecné Informace o Struktuře, vazbách a možnostech tohoto Unikátního Globálnho Řešení Celé oblasti IT až na malinké vyjímky.
Neomezená možnost vývoje, pomoci, spolupráce, či cokoliv jiného jek dispozici. Každá spolupráce je pro mne přínosem
Ceník a Licencování EIC-ESB Řešení
EASY-IT-CENTER & EASY-SYSTEM-BUILDER
Pro myšlení, vývoj nástrojů a práci s nimi hodné 21. století
Runtime Edice
Kč 35000 EITC-ESB Limited = Kompletní Řešení bez Sub Serverů: GIT,DOC,TaskMan,...
a Provider Funkcionalit
Kč 50000 EITC-ESB Extended = Kompletní Řešení včetně Sub Serverů: GIT,DOC,TaskMan,...
bez Provider Funkcionalit
Developer Edice
Kč 75000 EITC-ESB OpenServer = Kompletní Řešení s Uvolněným Kódem EIC pro vlastní Vývoj
v neomezeně Instancích pro Interní potřeby Firmy bez Provider Funkcionalit
Kč 75000 EITC-ESB OpenSystem = Kompletní Řešení s Uvolněným Kódem ESB pro vlastní Vývoj
v neomezeně Instancích pro Interní potřeby Firmy bez Provider Funkcionalit
Kč 100000 EITC-ESB OpenCode = Uvolněny kódy EIC-ESB pro vlastní Vývoj
v neomezeně Instancích pro Interní potřeby Firmy bez Provider Funkcionalit
Distributor Edice
Kč 250000 Partnerství a Distribuce = Plný přístup ke všem Kódům pro Vývoj Vlastní Cestou,
spolupartnerství při vývoji, udávání směru a priorit, bez Provider Funkcionalit, Distribuce Třetím Stranám
Kč 750000 Odloučený Vývoj = Plný přístup ke všem Kódům pro Vývoj Vlastní Cestou
včetně Provider Funkcionalit,Project Managementu, Distribuce Třetím Stranám, atd...
Školení
Kč 30000/Tyden EITC-ESB DevTraining = 2dny Kompletní Představení produktů,
1 den Zaučení vývoje, poslední 2dny BONUS tvorba vlastních MS/Web Agend
Update/Podpora
Kč 15000/rok EITC-ESB MainTenance = K dispozici unlimited aktualizace, Online Správa Projektů, AutoUpdate/AutoRepair
Kč 1500/hod EITC-ESB RemoteSupport = Online Tel/Remote podpora
IT Vývoj Ostatní
Kč 750/hod Vývoj / Konzultace / Podpora = Spolupráce, Vývoj Jiných Produktů, řešení, Zakázkové práce,
Příklad Cenové Náročnosti
- VYBUDOVÁNÍ MALÉHO VLASTNÍHO SYSTÉMU (5 Tabulek [Výkazy Práce])
od 20 000 Kč nebo hodinově 750 Kč/hod - VYBUDOVÁNÍ VLASTNÍHO SYSTÉMU (20 tabulek)
od 40 000 Kč nebo hodinově 750 Kč/hod
3. Fakturační Systém včetne MultiPoboček/Nabídek/Objednávek/Pokl.Dokladů/Dobropisů/Faktur (40Tabulek)
časová náročnost byla 14dní ve starých verzích EDC - ESB viz: Agenda Obchodu v SYSTEMU
včetně generování spřažených dokladů,
Úvod EIC&ESB-Globální IT Řešení na míru
EasyITcenter & EasySYSTEMbuiler - Globální Řešení vašeho IT Obecné Informace o Struktuře, vazbách a možnostech tohoto Unikátního Globálnho Řešení Celé oblasti IT až na malinké vyjímky.
Kontakty
Adresa a Kontakty
Email:
- Libor.Svoboda@GroupWare-Solution.eu
- Libor.Svoboda@KlikneteZde.Cz
Address:
Street: Žlutava 173
City: Žlutava
PostCode: 761 63
State: Czech Republic
Phone: 00420 724 986 873
- Youtube: https://www.youtube.com/playlist?list=PLmE7gP9LTBimNJQ444ypG8HVce23fa2Hb
- Facebook: https://www.facebook.com/GroupWareSolution
- Facebook: Nejen SW pro vaši firmu
- LinkedIn: https://www.linkedin.com/in/libor-svoboda-7b96014a/
- Eshop: https://GroupWare-Solutions.Eu
- Webové Stránky: https://GroupWare-Solution.Eu
- Online Module Doc Viewer Modul: Https://KlikneteZde.Cz
- Online Dokumentační Portal: Https://KlikneteZde.Cz/EIC&ESBdocs/CodeDocs
- Online Web Portal z Editorůl: Https://KlikneteZde.Cz/Portal
- Online MS System ESB: https://Kliknetezde.Cz:5000/
Úvod Start -DATABASE-RULE
Vše začíná U databáze. Pravidla určující MultiLogiku v 1 Balíčku. Zde najdete Kompletní Strukturu Aktuální Databáze a Seznam Pravidel, které je obecně dobré dodržovat
1 pravidlo: Každé slovo má Hluboký Význam
Seznam a popisy automatických funkcinalit a pravidel, nakteých stojí bezobslužnost spousty jinak nutných úkonů při vývoji. Tyto pravidla zajišťují Velmi snadný a rychlý vývoj
Členění Webu EIC Serveru
Pro myšlení, vývoj nástrojů a práci s nimi hodné 21. století
Podívejte se čerstvě Vydaný Dokumentační Portal komlpet v Češtině.
Díky implementovanému AUTO překladači se už nestane že něčemu neporozumíte.
Protože Správné porozumění je nejčastější Kámen Úrazu u tolik Trpících Dokumentací.
Psát Dokumentaci je totiž horší než vývoj.
Věřím, že budete mít zajímavou podívanou co se dá nachystat ve volném čase v 1 Měsíci.
Plánované Implementace Řešení EIC&ESB
-
SYSTEM udělat setting limit dataview 500,
Ne pro číselníky , vyžádá si úpravu all api Get nepovinný lastcount, -
SYSTEM V datové přidat radek s inputy a multiselect Combo zobrazených dat pro filtraci v nastaveni pridat zobrazit filtry
-
SYSTEM udělat panel utility
Ping, opět ports, terminál, cmd, srv cmd, SQL, JS,HTML, CSS, MD, C# pro rychlé testy funkčnosti, HTML+JS+CSS pro generátory + select framework pro auto definici knihoven a stylu,
Přehled runtime settings, tables, v nastaveni pridat on/off utility
4)SERVER backendcheck bude nastavovat user is online, a system vytvořit chat s uzivately.
- SYSTEM udělat left float panel poznamky
6)SYSTEM AGENGA WEBSOCKET ENDPOINT
Aby si mohli implementovat cokoliv na webu a přidat systémový CHAT,
6b) add bod 10) FILES + k files udělat agendu user Static files s možností nastavit sdílení, verzovani = files flow + přidat do agend selekci souboru tento zdroj = USER FILE STORE
-
SYSTEM SEHNAT LEPSI kalkulačku
-
SYSTEM nastavit tooltip description i pro listbox
-
SYSTEM log přidat enum Task/Log a mazat jen logy
-
SYSTEM dodělat static files a přidat typy: framework, subdomain, userfiles, eicproject, eiclibrary, esbproject, esblibrary ,JSlibrary, CSSlibrary
SystemSharedStore,WebTool,WebObject, WebPage,
Typy budou agenda s nastavením verzovani, autocleanu or move do storehistory. Nesmí tam být 2x
ATD.... + automaticky verzovat soubory při uložení. BUDE TO GLOBALNI FILE STORE
- Centrální správa static files, zapínání verzovani pro typy, auto mazání old verzi, přesun old verzi do té lokální DB jako STOREHISTORYLOG s hromadnou operaci cleanu se zvoleným typem
- dodělat github
12)SYSTEM Generické Agendy Pro Uživatele bude vycházet z Dynamic API přes Universální Formulář
-
Zprovoznit ExperDoc Editor a Viewer Pro Doc Server, potazmo pridat pravo zapisovat externistun
-
Vytvořit Generátor dokumentace z Descriptions jako hromadnou operaci
-
Vytvořit Globální Přepis Description a popisovaču slovo za slovo
-
Routingem muzu treba image nebo html file nebo cokoliv poslat do takoveho layoutu ktery v sobe bude mit editor a nacte si dany soubor sam
a tak muzu udelat staticky html editor pro subdomain file -
Přidat Novou Agengu: HTML Generátory: Ya v knihovně nachystat generování různých typů HTML
bude i nástroj při tvorbě Statických webů, prezentačních stránek, statických stránek,
Přehledů, dokumentace, partnerská příprava dat -
vytvořit remote konzoli na server pro moznost instalace a stravy online ze systemu
-
dodělat dynamicke API z SQL
-
dodělat vyhledávání ve všech DB dokumentacích pro Editory - Search Panel
-
Udělat sloučený Export vybraných knihoven jako StartuUp Script CSS
-
Vytvořit agendu Nastavení k Docs, styly s uploadem, linky
-
Vytvořit agendu napoveda kodu s vlastnimi castmi kodu - codecompletention
-
VYTvořit Gendu Generování Dokumentace MD
-
Vytvořit Agendu Generátory pro Web Portal a stranku skladat i z Generátorů
-
Prenest Sablony Html Souboru z Razor do Agendy pro uplnou spravu
- zrusit agendu includovane scripty so sablon, - budou si udrzovat sablony
- takto: vytvořit agendu nastroju a k nim templaty v ni budou i editory a nastroje
- Kazdy Layout bude mit svoji Page a to bude plate i pro portaly
- PS: portalum dat index znacku a dovolit jich neomezene
A k nim Sablony Stranek a tak pujde delat nastroje s Menu Atd, vazba musi byt zapsana v nich
Ukladat je stejne jako portal scripty jsou potreba pro build serveru = dynamicke programovani
-
TODO slozky upravit na browsable, allowedOpen in browser, must be authorized Nova agenda
++++++++
- Galerie - Typ Video/Audio/Image/Other - vztahuje se k IMPORT/EXPORT
vytvořit nový panel Funkcionality - Typ Export/Import/Operace
1)udelat volani autorefresh DB->DOC
2a)Napsat dokumentaci že přepisuje přímo pro Live debuging
2b)import scriptů ze souborů do DB / export scriptů z DB so souborů
- změnit názvy scriptů podle toho co dělají a vše co se vztahuje k dané funkcionalitě napsat v 1 scriptu
nebude se to muset hledat a bude to na 1 místě SUPER
- i translation atd vše nasázet do globalscriptů
a k tomu udělat nastavení info typu - Global / Only Page /
a druhý typ Anonymous / ROLE
a udělat jak je v systému seznam API adres a ten bude sám měnit volání Anonymou/Auth podle toho jestli je přihlášený
NEWS
Nástoje Webu / nastavení Guest/ROLE a dle hoto se načtou - nějaká ikonka na webu
admin nástroje - přesunout logger
Guest nástroje -
a k tomu udělat nástroj zobrazení Dat ve Storage s možností smazat
a do toho nástoje udělat přizazené ID a obsah html stránky načíst do něj
- třeba mu udělat vlastní čast SCRIPT a něm si sám nastaví cokoliv
= a přesunout tam vševchny statické tooly
- SYSTEM Info Panel - IKONA ve footeru
-
Aktualizovat local DB Dev News
-
při načtení webset uložit Datum načtení a vytvořit nový parameter jak často Refrešovat
ne neřeší když je to uloženo
Data bude chtít vymyslet s životností něco jako definice dat
-
udělat třídu co doplní ikonu COPY a PRINT
-
Ke scriptům udělat možnost zadání názvu nástroje a podle toho natahovat CSS a JS
udělat něco jako INIT a ten zkontroluje jestli je načtený popř ho načte
NáPAD udelat MikroWeby + NODEJS.RUN něco jako vlastní builder a exportit WEBY
-
Vytvořit a publikovat úkolovník NEWS - přidat typ - Úkoly/ChangeLog/News/Reklama
-
Admin nástroj Importovat Css / Js
VEDE TO K vygenerování INDEX.html s exoportem všeho a spuštění NODE.JS a jede celý web
NEXT IDEA Analyzer Obsahu a vytahat všechny dole do knihovny pro Web tool
následno okno HTML + okno SCRIPT + STYLE ať si každý udělá stránku a vyexportuje ji
NEXT IDEA správnost kódu vždy končit středníkem = Analyzer LET,const,VAR a vygeneruje okno proměných stránky
kotrola, zda již někde neexistuje
== Generátor multifunkčích Webů s možností si ho celý poskládat z nástrojů
-
Dát V Systému Settings - zda MultiInstance ENABLE/DISABLE
-
VYMYSLET Export Group/Menu SYSTEM do Dokumentace + Popisy s automatickou grafikou členění a rozklikem pro web
a takto to pak přidat jako bod na stránku panelů ve skupině IS/MS SYSTEM -
vymyslet automatické přidání parametru výška řádku systému a automaticky přidat nastavení do kódu
jinak tento parametr, nebo seznam parametrů by mohl být definovn v menu a daný form už by jen poslouchal a plně dynamicky
nastaví něco[object with name] - parametrem
(začít tvořit SYSTEM Generator) -
jednou provždy opravit TimeStamp Timestamp na TimeStamp
-
we webmenu přidat zda po stránce načíst jen HTML part nebo Celý Obsah
-
dodělat unikatní cesty ke sciptum bez js/css složky kvůli nástrojům co maji bordel i z IS při uložení
-
každý script by měl mít části guest/webuser/admin/provider aby se načítaly jen ty správné
-
přenést css z Layoutu
-
opravit volání API z web Editorů a editor přenést do WebAdmina -
-
Udělat zálohování scriptů/ Import Složky
-
SYSTEM pro enumy udělat tabulku kde skupina BUDE jen text - takto to půjde spravovat
jedna tabulka pro všechny enumy -
minifikace bude operace nebo ať ti to udělá sám
-
dodelat ukladani minify saving je odstaveny SaveNewMinifiedFile
-
SYSTEM sjednotit APP konfiguraci jako na Backendu
24] SYSTEM v nekterych setrecord - Chybi TRY chatch
- scafolging přesunout do prázdného projektu [bude z něho regenetate Projekt] - řeší RYCHLOST
26 REACT DESKTOP dobry na pouziti v generatoru
https://react-beautiful-dnd.netlify.app/?path=/story/board--scrollable-columns
netřeba, již zahrnuto v Technologii Metro4
-
přidat do stránek OpenDocView jak je na Nomadu
-
zapnout možnost otevřít 1 okno vícekrát, rozdělit do více instancí
28a) TODO Nastavení Globálních Stylů -
zapnout možnost rozdělit systém na více instancí
-
designer JS+CSS taky udělat s výběrem jako u knihovny a překlik
-
dodělat vyhledávání ve scriptech
-
prezentační knihovna Funkcionality
-
prezentační knihovna Knihovny
-
prezentační knihovna Služby
-
prezentační knihovna Statické Nástroje a Generátory
-
registrovat více controlerů (teĎ mám default) a na základě toho udělat více webů? Třeba i s překrytím stejné URL?
-
do scheduleru přidat scripty + startcommand [procesy ukladat do runtimelistu]
-
nová agenda Multi Web server (react,php,electron,atd..) => obsah jako StaticWeby
- start command, install command, build command, možná list commandů k zadání
- certifikát do složky server/cert + script na generování pro LIN/WIN, AUTO zahrnout subdomény
-
nová agenda controling - dynamické SQL + předpřipravené GrafFormy pro vlastní definice pohledů
-
nová agenda TableBuilder - Rozšíření DB + vygenerování kódu API
-
StaticWeby jako upload folder/file s Adr strukturou a náhledem souborů(Webview - pict,video,audio/Editor JS,CSS,html)
-
StaticWeb i MultiWebServer by mohly mít direct Clon z Githubu
-
Prověřit Generic GraphQL - jestli má ještě nějaký přínos - DATASET Dynamic Builder pro Controling/Grafy
-
Zaimplementovat SSH
-
dát SSH a FTP do plánovaných úloh
-
zbývá dokumentace vyhledávače pro editory
-
webdocKnihovna není nasazená na webu
-
dodelat sitemapu
-
static files, chybi form a navazane data
50] v systému řešení tooltipů, vyzobat všechny descriptiony k záznamům, nadřazených skupin atd, a osnovou je vyskládat, a vlevo nahoře pridat ikonu INFO -
udělat agendu emaillogger
-
udělat 1x SP pro čištění zadaných tabulek
-
Převzít hotel HTML messaging, přidat changelog, group-users-blog,Task Request-Blog,Rss-News,Web-Socket Messaging, Web-Socket Blog
-
licence pro web
-
stahovani předloh stranek v html completu: https://www.creative-tim.com/ tyto pak stačí zeditovat a jede se
-
vytvořit osobní parametry uživatele - dynamický formulář zde si vybere zasílat zprávy atd, paramtry zadá správce v nové agendě s typem parametru - mixed enum + copy dynam param form, funkce link, email web atd - hosting
-
vytvořit layout s překladačem a modulům dát možnost volby layoutu - až po celé HTML - musí to jít, povinnost ma pouze renderBody
-
provider ke kazde subdomene website moznost zalozit localDB co je nachystany
-
SystemOperation, pridat inputtype [none,int,bit,table,json,etc.], inputdefinition[name,tablestructure], a kdyz bude zobrazit generic popup pro vyplneni - pro operace se vstupy atd
-
docstemplates, pridat higlighttype,filetype [.exe atd] a zobrazovat v highlight okne se stazenim
61] pro portal, zalozit agendy web backroundvideoList + option zvuku, mp3list
62] sourcebrowser - zkusit zaimplementovat plugin a generovat browser jako soucast backendu
63] kompletní dokumentace a zobrazeni mermaidů, pro Server, System, DB, WEB static tools, webFunctions Library-API-behavior-object atd, s popisi , rozložením, atd.. -
zkusit doplnit "Docs" o highlight, mermaid
-
System Vytvořit Datagrid Context menu - obshlahnout ze swap Builder
E:\Projekty\MyGitHub\FreeProjects\LocalDB-MSSQL-IS-System-Generator -
implementovat github do serveru jako server službu
-
Nabídnout moje projekty githubu včetně předchopzí verze System generatoru SwapBuilder
-
přidat chystané novinky a vkládat tam github projekty
-
changelogh zaimplementované
-
vytvořit tabulku s datum meno, popis, soubor - a do té se budou ukladat změny, bud tam nahraji celou změnu
nebo to bude dělat nějaký triger, a tak budu mít hotovou agengu chaglelogu i s generováním pro web -
Zmenit správu šablon na dynamickou přes agendu, tak jich bude moci být neomezeně
72] v port8lu tvorba webu udelat knihovnu s onlineukazkami
PROVIDING
-
dodelat static files a projekty budou ve static files se kopirovat z GLOBAL do určitých složek
a k tomu bude přidán index a zakouppené administrace, pohledy, dokumentace, -
vytvorit zobrazeni struktur serverDbDiagram projekt a jejich rozpadů logiky
-
pridat pole globalversion, customversion, solution(licsrv,docsrv,) a vytvořit, migration procedure
která vyzobe rozdili, uloyi script do DB, povysi verze, upozorni na custom, tzn jeste migracni tabulky -
vytvorit rozpis struktury databáze a editor s volbou tabulek, s funkcí přidat nové pole - celá migracni logika rizena ze systému
musi vzniknoout rizeni rozvoje databáze -
sjednotit template files a pridat typ, skupinu,
-
sehnat sql convert to jiných typu sql
-
zaimplementovat sourcebrowser do serveru aby zobrazoval web
-
zkusit zaimplementovat astnetstatic pro export webu jako staticky i s daty a vyexportovat soucasny portal
-
vytvořit generator infotouchapp(možno i maui verzi pro mobily) se zobrazením jednoduchých html stránek s group/menu strukturou
plus sipky tam/zpet menu = resení pro infopanely viz radnice panel -
system dodat fultext search do knihoven kódů se skrytím položek, kde nebyl nalezen
-
dodat do všech/vybraných tabulek description - bude sloužit jako fast help pro systém i generování webu
-
vyzkoušet konverzi xaml->html a system prenest na html
13] opravit načítání portálu a scriptu do server localtable ulevi DB
14] prestehovat github a docs do podslozky PROVIDER
15] add xaml web to netcore
16] azure server pro muj portal bude potřeba z duvodu provider funkcí, které jsou bat atd -
web popsat jako static Technology - s možností vyseparovat libovolnou funkcionalitu
-
Dodelat WebScrapScript a zaradit do nove agendy servers a takto se budou tvorit node, react atd, servery
-
LayerJS Zoom umi nahledy html stranek a zoomove je otevre
-
vytvořit Server agendu Process Task s možností on Startup a zapínáním a vypínáním online
-
scripty portalu dat do lokalni tabulky - snizi pocet dotazu na DB
-
SYSTEM Přenastavit seznam IT Nástroje a Manuály - Vypublikovat na Web v Novem Desktopu
MarkDown Item Template
Úvod Start -DATABASE-RULE
Vše začíná U databáze. Pravidla určující MultiLogiku v 1 Balíčku. Zde najdete Kompletní Strukturu Aktuální Databáze a Seznam Pravidel, které je obecně dobré dodržovat
1 pravidlo: Každé slovo má Hluboký Význam
Struktura Tabulek te stále Téměř totožná, Pár Pravidel stačí k vytvoření dokonalého Systému
DB - Export Tabulek Řešení,
Zde najdete Všechny Tabulky Řešení, Struktura má Centrální Logiku, která zamezuje vzniku chyb
TBL BasicAttachmentList
IF OBJECT_ID('[dbo].[BasicAttachmentList]') IS NOT NULL
DROP TABLE [dbo].[BasicAttachmentList]
GO
CREATE TABLE [dbo].[BasicAttachmentList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[ParentId] INT NOT NULL,
[ParentType] VARCHAR(20) NOT NULL,
[FileName] VARCHAR(150) NOT NULL,
[Attachment] VARBINARY(max) NOT NULL,
[UserId] INT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_AttachmentList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_AttachmentList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [UX_AttachmentList] UNIQUE NONCLUSTERED ([ParentId] asc, [FileName] asc) ,
CONSTRAINT [FK_AttachmentList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
GO
CREATE NONCLUSTERED INDEX [IX_AttachmentList]
ON [dbo].[BasicAttachmentList] ([ParentId] asc, [ParentType] asc)
TBL BasicCalendarList
IF OBJECT_ID('[dbo].[BasicCalendarList]') IS NOT NULL
DROP TABLE [dbo].[BasicCalendarList]
GO
CREATE TABLE [dbo].[BasicCalendarList] (
[UserId] INT NOT NULL,
[Date] DATE NOT NULL,
[Notes] VARCHAR(1024) NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_Calendar_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_Calendar] PRIMARY KEY CLUSTERED ([UserId] asc, [Date] asc) ,
CONSTRAINT [FK_Calendar_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) ON UPDATE CASCADE ON DELETE CASCADE )
TBL BasicCurrencyList
IF OBJECT_ID('[dbo].[BasicCurrencyList]') IS NOT NULL
DROP TABLE [dbo].[BasicCurrencyList]
GO
CREATE TABLE [dbo].[BasicCurrencyList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[Name] VARCHAR(5) NOT NULL,
[ExchangeRate] NUMERIC(10,2) NOT NULL CONSTRAINT [DF_CurrencyList_ExchangeRate] DEFAULT ((1)),
[Fixed] BIT NOT NULL CONSTRAINT [DF_CurrencyList_Fixed] DEFAULT ((1)),
[Description] TEXT NULL,
[UserId] INT NOT NULL,
[Active] BIT NOT NULL CONSTRAINT [DF_CurrencyList_Active] DEFAULT ((1)),
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_CurrencyList_TimeStamp] DEFAULT (getdate()),
[Default] BIT NOT NULL CONSTRAINT [DF_CurrencyList_Default] DEFAULT ((0)),
CONSTRAINT [PK_CurrencyList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [FK_CurrencyList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
GO
CREATE TRIGGER [dbo].[TR_CurrencyList] ON [dbo].[BasicCurrencyList]
FOR INSERT, UPDATE, DELETE
AS
DECLARE @Operation VARCHAR(15)
IF EXISTS (SELECT 0 FROM inserted)
BEGIN
DECLARE @setDefault bit;DECLARE @RecId int;
SET NOCOUNT ON;
IF EXISTS (SELECT 0 FROM deleted)
BEGIN --UPDADE
SELECT @setDefault = ins.[Default] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BasicCurrencyList SET [Default] = 0 WHERE Id <> @RecId;
END
END ELSE
BEGIN -- INSERT
SELECT @setDefault = ins.[Default] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BasicCurrencyList SET [Default] = 0 WHERE Id <> @RecId;
END
END
END ELSE
BEGIN --DELETE
SELECT @setDefault = ins.[Default] from deleted ins;
SELECT @RecId = ins.Id from deleted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BasicCurrencyList SET [Default] = 1
WHERE Id IN(SELECT TOP (1) Id FROM [dbo].BasicCurrencyList WHERE Id <> @RecId)
;
END
END
GO
TBL BasicImageGalleryList
IF OBJECT_ID('[dbo].[BasicImageGalleryList]') IS NOT NULL
DROP TABLE [dbo].[BasicImageGalleryList]
GO
CREATE TABLE [dbo].[BasicImageGalleryList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[IsPrimary] BIT NOT NULL,
[FileName] VARCHAR(150) NOT NULL,
[Attachment] VARBINARY(max) NOT NULL,
[UserId] INT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_ImageGalleryList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_ImageGalleryList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [UX_ImageGalleryList] UNIQUE NONCLUSTERED ([FileName] asc) ,
CONSTRAINT [FK_ImageGalleryList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
GO
CREATE TRIGGER [dbo].[TR_ImageGalleryList] ON [dbo].[BasicImageGalleryList]
FOR INSERT, UPDATE, DELETE
AS
DECLARE @Operation VARCHAR(15)
IF EXISTS (SELECT 0 FROM inserted)
BEGIN
DECLARE @isPrimary bit;DECLARE @RecId int;DECLARE @HotelId int;
SET NOCOUNT ON;
IF EXISTS (SELECT 0 FROM deleted)
BEGIN --UPDADE
SELECT @isPrimary = ins.[IsPrimary] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@isPrimary = 1) BEGIN
UPDATE [dbo].BasicImageGalleryList SET [IsPrimary] = 0 WHERE Id <> @RecId;
END
END ELSE
BEGIN -- INSERT
SELECT @isPrimary = ins.[IsPrimary] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@isPrimary = 1) BEGIN
UPDATE [dbo].BasicImageGalleryList SET [IsPrimary] = 0 WHERE Id <> @RecId;
END
END
END ELSE
BEGIN --DELETE
SELECT @isPrimary = ins.[IsPrimary] from deleted ins;
SELECT @RecId = ins.Id from deleted ins;
IF(@isPrimary = 1) BEGIN
UPDATE [dbo].BasicImageGalleryList SET [IsPrimary] = 1
WHERE Id IN(SELECT TOP (1) Id FROM [dbo].BasicImageGalleryList WHERE Id <> @RecId)
;
END
END
GO
TBL BasicItemList
IF OBJECT_ID('[dbo].[BasicItemList]') IS NOT NULL
DROP TABLE [dbo].[BasicItemList]
GO
CREATE TABLE [dbo].[BasicItemList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[PartNumber] VARCHAR(50) NOT NULL,
[Name] VARCHAR(150) NOT NULL,
[Description] TEXT NULL,
[Unit] VARCHAR(10) NOT NULL,
[Price] NUMERIC(10,2) NOT NULL,
[VatId] INT NOT NULL,
[CurrencyId] INT NOT NULL,
[UserId] INT NOT NULL,
[Active] BIT NOT NULL CONSTRAINT [DF_ItemList_Active] DEFAULT ((1)),
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_ItemList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_ItemList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_ItemList] UNIQUE NONCLUSTERED ([PartNumber] asc) ,
CONSTRAINT [FK_ItemList_CurrencyList] FOREIGN KEY ([CurrencyId]) REFERENCES [dbo].[BasicCurrencyList] (Id) ,
CONSTRAINT [FK_ItemList_UnitList] FOREIGN KEY ([Unit]) REFERENCES [dbo].[BasicUnitList] (Name) ,
CONSTRAINT [FK_ItemList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) ,
CONSTRAINT [FK_ItemList_VatList] FOREIGN KEY ([VatId]) REFERENCES [dbo].[BasicVatList] (Id) )
TBL BasicUnitList
IF OBJECT_ID('[dbo].[BasicUnitList]') IS NOT NULL
DROP TABLE [dbo].[BasicUnitList]
GO
CREATE TABLE [dbo].[BasicUnitList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[Name] VARCHAR(10) NOT NULL,
[Description] TEXT NULL,
[UserId] INT NOT NULL,
[Active] BIT NOT NULL CONSTRAINT [DF_UnitList_Active] DEFAULT ((1)),
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_UnitList_TimeStamp] DEFAULT (getdate()),
[Default] BIT NOT NULL CONSTRAINT [DF_UnitList_Default] DEFAULT ((0)),
CONSTRAINT [PK_UnitList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_UnitList] UNIQUE NONCLUSTERED ([Name] asc) ,
CONSTRAINT [FK_UnitList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
GO
CREATE TRIGGER [dbo].[TR_UnitList] ON [dbo].[BasicUnitList]
FOR INSERT, UPDATE, DELETE
AS
DECLARE @Operation VARCHAR(15)
IF EXISTS (SELECT 0 FROM inserted)
BEGIN
DECLARE @setDefault bit;DECLARE @RecId int;
SET NOCOUNT ON;
IF EXISTS (SELECT 0 FROM deleted)
BEGIN --UPDADE
SELECT @setDefault = ins.[Default] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BasicUnitList SET [Default] = 0 WHERE Id <> @RecId;
END
END ELSE
BEGIN -- INSERT
SELECT @setDefault = ins.[Default] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BasicUnitList SET [Default] = 0 WHERE Id <> @RecId;
END
END
END ELSE
BEGIN --DELETE
SELECT @setDefault = ins.[Default] from deleted ins;
SELECT @RecId = ins.Id from deleted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BasicUnitList SET [Default] = 1
WHERE Id IN(SELECT TOP (1) Id FROM [dbo].BasicUnitList WHERE Id <> @RecId)
;
END
END
GO
TBL BasicVatList
IF OBJECT_ID('[dbo].[BasicVatList]') IS NOT NULL
DROP TABLE [dbo].[BasicVatList]
GO
CREATE TABLE [dbo].[BasicVatList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[Name] VARCHAR(20) NOT NULL,
[Value] NUMERIC(10,2) NOT NULL,
[Default] BIT NOT NULL,
[Description] TEXT NULL,
[UserId] INT NOT NULL,
[Active] BIT NOT NULL CONSTRAINT [DF_VatList_Active] DEFAULT ((1)),
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_VatList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_VatList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_VatList] UNIQUE NONCLUSTERED ([Value] asc, [Active] asc) ,
CONSTRAINT [FK_VatList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
GO
CREATE TRIGGER [dbo].[TR_VatList] ON [dbo].[BasicVatList]
FOR INSERT, UPDATE, DELETE
AS
DECLARE @Operation VARCHAR(15)
IF EXISTS (SELECT 0 FROM inserted)
BEGIN
DECLARE @setDefault bit;DECLARE @RecId int;
SET NOCOUNT ON;
IF EXISTS (SELECT 0 FROM deleted)
BEGIN --UPDADE
SELECT @setDefault = ins.[Default] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BasicVatList SET [Default] = 0 WHERE Id <> @RecId;
END
END ELSE
BEGIN -- INSERT
SELECT @setDefault = ins.[Default] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BasicVatList SET [Default] = 0 WHERE Id <> @RecId;
END
END
END ELSE
BEGIN --DELETE
SELECT @setDefault = ins.[Default] from deleted ins;
SELECT @RecId = ins.Id from deleted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BasicVatList SET [Default] = 1
WHERE Id IN(SELECT TOP (1) Id FROM [dbo].BasicVatList WHERE Id <> @RecId)
;
END
END
GO
TBL BasicViewAttachmentList
IF OBJECT_ID('[dbo].[BasicViewAttachmentList]') IS NOT NULL
DROP VIEW [dbo].[BasicViewAttachmentList]
GO
CREATE VIEW dbo.BasicViewAttachmentList
AS
SELECT TOP (100) PERCENT AL.Id, AL.FileName, IL.PartNumber, AL.TimeStamp
FROM dbo.BasicAttachmentList AS AL LEFT OUTER JOIN
dbo.BasicItemList AS IL ON AL.ParentId = IL.Id AND AL.ParentType = 'ITEM'
ORDER BY AL.FileName
GO
TBL BusinessAddressList
IF OBJECT_ID('[dbo].[BusinessAddressList]') IS NOT NULL
DROP TABLE [dbo].[BusinessAddressList]
GO
CREATE TABLE [dbo].[BusinessAddressList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[AddressType] VARCHAR(20) NOT NULL,
[CompanyName] VARCHAR(150) NOT NULL,
[ContactName] VARCHAR(150) NULL,
[Street] VARCHAR(150) NOT NULL,
[City] VARCHAR(150) NOT NULL,
[PostCode] VARCHAR(20) NOT NULL,
[Phone] VARCHAR(20) NOT NULL,
[Email] VARCHAR(150) NULL,
[BankAccount] VARCHAR(150) NULL,
[Ico] VARCHAR(20) NULL,
[Dic] VARCHAR(20) NULL,
[UserId] INT NOT NULL,
[Active] BIT NOT NULL CONSTRAINT [DF_AddressList_Active] DEFAULT ((1)),
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_AddressList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_AddressList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [FK_AddressList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
GO
CREATE NONCLUSTERED INDEX [IX_AddressList]
ON [dbo].[BusinessAddressList] ([AddressType] asc)
TBL BusinessBranchList
IF OBJECT_ID('[dbo].[BusinessBranchList]') IS NOT NULL
DROP TABLE [dbo].[BusinessBranchList]
GO
CREATE TABLE [dbo].[BusinessBranchList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[CompanyName] VARCHAR(150) NOT NULL,
[ContactName] VARCHAR(150) NULL,
[Street] VARCHAR(150) NOT NULL,
[City] VARCHAR(150) NOT NULL,
[PostCode] VARCHAR(20) NOT NULL,
[Phone] VARCHAR(20) NOT NULL,
[Email] VARCHAR(150) NULL,
[BankAccount] VARCHAR(150) NULL,
[Ico] VARCHAR(20) NULL,
[Dic] VARCHAR(20) NULL,
[UserId] INT NOT NULL,
[Active] BIT NOT NULL CONSTRAINT [DF_BranchList_Active] DEFAULT ((1)),
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_BranchList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_BranchList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_BranchList] UNIQUE NONCLUSTERED ([CompanyName] asc) ,
CONSTRAINT [FK_BranchList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
GO
CREATE TRIGGER [dbo].[TR_BranchList] ON [dbo].[BusinessBranchList]
FOR INSERT, UPDATE, DELETE
AS
DECLARE @Operation VARCHAR(15)
IF EXISTS (SELECT 0 FROM inserted)
BEGIN
DECLARE @setActive bit;DECLARE @RecId int;
SET NOCOUNT ON;
IF EXISTS (SELECT 0 FROM deleted)
BEGIN --UPDADE
SELECT @setActive = ins.[Active] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setActive = 1) BEGIN
UPDATE [dbo].BusinessBranchList SET [Active] = 0 WHERE Id <> @RecId;
END
END ELSE
BEGIN -- INSERT
SELECT @setActive = ins.[Active] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setActive = 1) BEGIN
UPDATE [dbo].BusinessBranchList SET [Active] = 0 WHERE Id <> @RecId;
END
END
END ELSE
BEGIN --DELETE
SELECT @setActive = ins.[Active] from deleted ins;
SELECT @RecId = ins.Id from deleted ins;
IF(@setActive = 1) BEGIN
UPDATE [dbo].BusinessBranchList SET [Active] = 1
WHERE Id IN(SELECT TOP (1) Id FROM [dbo].BusinessBranchList WHERE Id <> @RecId)
;
END
END
GO
GO
EXEC sys.sp_addextendedproperty
@name = N'MS_Description', @value = N'',
@level0type = N'SCHEMA', @level0name = [dbo],
@level1type = N'TABLE', @level1name = [BusinessBranchList];
TBL BusinessCreditNoteList
IF OBJECT_ID('[dbo].[BusinessCreditNoteList]') IS NOT NULL
DROP TABLE [dbo].[BusinessCreditNoteList]
GO
CREATE TABLE [dbo].[BusinessCreditNoteList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[DocumentNumber] VARCHAR(20) NOT NULL,
[Supplier] VARCHAR(512) NOT NULL,
[Customer] VARCHAR(512) NOT NULL,
[IssueDate] DATETIME2 NOT NULL,
[InvoiceNumber] VARCHAR(20) NULL,
[Storned] BIT NOT NULL,
[TotalCurrencyId] INT NOT NULL,
[Description] TEXT NULL,
[TotalPriceWithVat] NUMERIC(10,2) NOT NULL,
[UserId] INT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_CreditNoteList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_CreditNoteList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_CreditNoteList] UNIQUE NONCLUSTERED ([DocumentNumber] asc) ,
CONSTRAINT [FK_CreditNoteList_CurrencyList] FOREIGN KEY ([TotalCurrencyId]) REFERENCES [dbo].[BasicCurrencyList] (Id) ,
CONSTRAINT [FK_CreditNoteList_OutgoingInvoiceList] FOREIGN KEY ([InvoiceNumber]) REFERENCES [dbo].[BusinessOutgoingInvoiceList] (DocumentNumber) ,
CONSTRAINT [FK_CreditNoteList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL BusinessCreditNoteSupportList
IF OBJECT_ID('[dbo].[BusinessCreditNoteSupportList]') IS NOT NULL
DROP TABLE [dbo].[BusinessCreditNoteSupportList]
GO
CREATE TABLE [dbo].[BusinessCreditNoteSupportList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[DocumentNumber] VARCHAR(20) NOT NULL,
[PartNumber] VARCHAR(50) NULL,
[Name] VARCHAR(150) NOT NULL,
[Unit] VARCHAR(10) NOT NULL,
[PcsPrice] NUMERIC(10,2) NOT NULL,
[Count] NUMERIC(10,2) NOT NULL,
[TotalPrice] NUMERIC(10,2) NOT NULL,
[Vat] NUMERIC(10,2) NOT NULL,
[TotalPriceWithVat] NUMERIC(10,2) NOT NULL,
[UserId] INT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_CreditNoteItemList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_CreditNoteItemList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [FK_CreditNoteItemList_CreditNoteList] FOREIGN KEY ([DocumentNumber]) REFERENCES [dbo].[BusinessCreditNoteList] (DocumentNumber) ON DELETE CASCADE ,
CONSTRAINT [FK_CreditNoteItemList_UnitList] FOREIGN KEY ([Unit]) REFERENCES [dbo].[BasicUnitList] (Name) ,
CONSTRAINT [FK_CreditNoteItemList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL BusinessExchangeRateList
IF OBJECT_ID('[dbo].[BusinessExchangeRateList]') IS NOT NULL
DROP TABLE [dbo].[BusinessExchangeRateList]
GO
CREATE TABLE [dbo].[BusinessExchangeRateList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[CurrencyId] INT NOT NULL,
[Value] DECIMAL(10,2) NOT NULL,
[ValidFrom] DATE NULL,
[ValidTo] DATE NULL,
[Description] TEXT NULL,
[UserId] INT NOT NULL,
[Active] BIT NOT NULL CONSTRAINT [DF_CourseList_Active] DEFAULT ((1)),
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_CourseList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_CourseList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [FK_CourseList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) ,
CONSTRAINT [FK_ExchangeRateList_CurrencyList] FOREIGN KEY ([CurrencyId]) REFERENCES [dbo].[BasicCurrencyList] (Id) )
TBL BusinessIncomingInvoiceList
IF OBJECT_ID('[dbo].[BusinessIncomingInvoiceList]') IS NOT NULL
DROP TABLE [dbo].[BusinessIncomingInvoiceList]
GO
CREATE TABLE [dbo].[BusinessIncomingInvoiceList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[DocumentNumber] VARCHAR(20) NOT NULL,
[Supplier] VARCHAR(512) NOT NULL,
[Customer] VARCHAR(512) NOT NULL,
[IssueDate] DATETIME2 NOT NULL,
[TaxDate] DATETIME2 NOT NULL,
[MaturityDate] DATETIME2 NOT NULL,
[PaymentMethodId] INT NOT NULL,
[MaturityId] INT NOT NULL,
[OrderNumber] VARCHAR(50) NULL,
[Storned] BIT NOT NULL,
[PaymentStatusId] INT NOT NULL,
[TotalCurrencyId] INT NOT NULL,
[Description] TEXT NULL,
[TotalPriceWithVat] NUMERIC(10,2) NOT NULL,
[UserId] INT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_IncomingInvoiceList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_IncomingInvoiceList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_IncomingInvoiceList] UNIQUE NONCLUSTERED ([DocumentNumber] asc) ,
CONSTRAINT [FK_IncomingInvoiceList_CurrencyList] FOREIGN KEY ([TotalCurrencyId]) REFERENCES [dbo].[BasicCurrencyList] (Id) ,
CONSTRAINT [FK_IncomingInvoiceList_MaturityList] FOREIGN KEY ([MaturityId]) REFERENCES [dbo].[BusinessMaturityList] (Id) ,
CONSTRAINT [FK_IncomingInvoiceList_PaymentMethodList] FOREIGN KEY ([PaymentMethodId]) REFERENCES [dbo].[BusinessPaymentMethodList] (Id) ,
CONSTRAINT [FK_IncomingInvoiceList_PaymentStatusList] FOREIGN KEY ([PaymentStatusId]) REFERENCES [dbo].[BusinessPaymentStatusList] (Id) ,
CONSTRAINT [FK_IncomingInvoiceList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL BusinessIncomingInvoiceSupportList
IF OBJECT_ID('[dbo].[BusinessIncomingInvoiceSupportList]') IS NOT NULL
DROP TABLE [dbo].[BusinessIncomingInvoiceSupportList]
GO
CREATE TABLE [dbo].[BusinessIncomingInvoiceSupportList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[DocumentNumber] VARCHAR(20) NOT NULL,
[PartNumber] VARCHAR(50) NULL,
[Name] VARCHAR(150) NOT NULL,
[Unit] VARCHAR(10) NOT NULL,
[PcsPrice] NUMERIC(10,2) NOT NULL,
[Count] NUMERIC(10,2) NOT NULL,
[TotalPrice] NUMERIC(10,2) NOT NULL,
[Vat] NUMERIC(10,2) NOT NULL,
[TotalPriceWithVat] NUMERIC(10,2) NOT NULL,
[UserId] INT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_IncomingInvoiceItemList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_IncomingInvoiceItemList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [FK_IncomingInvoiceItemList_IncomingInvoiceList] FOREIGN KEY ([DocumentNumber]) REFERENCES [dbo].[BusinessIncomingInvoiceList] (DocumentNumber) ON DELETE CASCADE ,
CONSTRAINT [FK_IncomingInvoiceItemList_UnitList] FOREIGN KEY ([Unit]) REFERENCES [dbo].[BasicUnitList] (Name) ,
CONSTRAINT [FK_IncomingInvoiceItemList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
GO
CREATE NONCLUSTERED INDEX [IX_IncomingInvoiceItemList]
ON [dbo].[BusinessIncomingInvoiceSupportList] ([DocumentNumber] asc)
TBL BusinessIncomingOrderList
IF OBJECT_ID('[dbo].[BusinessIncomingOrderList]') IS NOT NULL
DROP TABLE [dbo].[BusinessIncomingOrderList]
GO
CREATE TABLE [dbo].[BusinessIncomingOrderList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[DocumentNumber] VARCHAR(20) NOT NULL,
[Supplier] VARCHAR(512) NOT NULL,
[Customer] VARCHAR(512) NOT NULL,
[Storned] BIT NOT NULL,
[TotalCurrencyId] INT NOT NULL,
[Description] TEXT NULL,
[CustomerOrderNumber] VARCHAR(50) NULL,
[TotalPriceWithVat] NUMERIC(10,2) NOT NULL,
[UserId] INT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_IncomingOrderList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_IncomingOrderList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_IncomingOrderList] UNIQUE NONCLUSTERED ([DocumentNumber] asc) ,
CONSTRAINT [FK_IncomingOrderList_CurrencyList] FOREIGN KEY ([TotalCurrencyId]) REFERENCES [dbo].[BasicCurrencyList] (Id) ,
CONSTRAINT [FK_IncomingOrderList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
GO
CREATE NONCLUSTERED INDEX [IX_IncomingOrderList_Supplier]
ON [dbo].[BusinessIncomingOrderList] ([Supplier] asc)
TBL BusinessIncomingOrderSupportList
IF OBJECT_ID('[dbo].[BusinessIncomingOrderSupportList]') IS NOT NULL
DROP TABLE [dbo].[BusinessIncomingOrderSupportList]
GO
CREATE TABLE [dbo].[BusinessIncomingOrderSupportList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[DocumentNumber] VARCHAR(20) NOT NULL,
[PartNumber] VARCHAR(50) NULL,
[Name] VARCHAR(150) NOT NULL,
[Unit] VARCHAR(10) NOT NULL,
[PcsPrice] NUMERIC(10,2) NOT NULL,
[Count] NUMERIC(10,2) NOT NULL,
[TotalPrice] NUMERIC(10,2) NOT NULL,
[Vat] NUMERIC(10,2) NOT NULL,
[TotalPriceWithVat] NUMERIC(10,2) NOT NULL,
[UserId] INT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_IncomingOrderItemList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_IncomingOrderItemList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [FK_IncomingOrderItemList_IncomingOrderList] FOREIGN KEY ([DocumentNumber]) REFERENCES [dbo].[BusinessIncomingOrderList] (DocumentNumber) ON DELETE CASCADE ,
CONSTRAINT [FK_IncomingOrderItemList_UnitList] FOREIGN KEY ([Unit]) REFERENCES [dbo].[BasicUnitList] (Name) ,
CONSTRAINT [FK_IncomingOrderItemList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
GO
CREATE NONCLUSTERED INDEX [IX_IncomingOrderItemList]
ON [dbo].[BusinessIncomingOrderSupportList] ([DocumentNumber] asc)
TBL BusinessMaturityList
IF OBJECT_ID('[dbo].[BusinessMaturityList]') IS NOT NULL
DROP TABLE [dbo].[BusinessMaturityList]
GO
CREATE TABLE [dbo].[BusinessMaturityList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[Name] VARCHAR(50) NOT NULL,
[Value] INT NOT NULL,
[Default] BIT NOT NULL,
[Description] TEXT NULL,
[UserId] INT NOT NULL,
[Active] BIT NOT NULL CONSTRAINT [DF_MaturityList_Active] DEFAULT ((1)),
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_MaturityList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_MaturityList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_MaturityList] UNIQUE NONCLUSTERED ([Name] asc) ,
CONSTRAINT [FK_MaturityList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
GO
CREATE TRIGGER [dbo].[TR_MaturityList] ON [dbo].[BusinessMaturityList]
FOR INSERT, UPDATE, DELETE
AS
DECLARE @Operation VARCHAR(15)
IF EXISTS (SELECT 0 FROM inserted)
BEGIN
DECLARE @setDefault bit;DECLARE @RecId int;
SET NOCOUNT ON;
IF EXISTS (SELECT 0 FROM deleted)
BEGIN --UPDADE
SELECT @setDefault = ins.[Default] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BusinessMaturityList SET [Default] = 0 WHERE Id <> @RecId;
END
END ELSE
BEGIN -- INSERT
SELECT @setDefault = ins.[Default] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BusinessMaturityList SET [Default] = 0 WHERE Id <> @RecId;
END
END
END ELSE
BEGIN --DELETE
SELECT @setDefault = ins.[Default] from deleted ins;
SELECT @RecId = ins.Id from deleted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BusinessMaturityList SET [Default] = 1
WHERE Id IN(SELECT TOP (1) Id FROM [dbo].BusinessMaturityList WHERE Id <> @RecId)
;
END
END
GO
TBL BusinessNotesList
IF OBJECT_ID('[dbo].[BusinessNotesList]') IS NOT NULL
DROP TABLE [dbo].[BusinessNotesList]
GO
CREATE TABLE [dbo].[BusinessNotesList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[Name] VARCHAR(50) NOT NULL,
[Description] TEXT NULL,
[UserId] INT NOT NULL,
[Active] BIT NOT NULL CONSTRAINT [DF_NotesList_Active] DEFAULT ((1)),
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_NotesList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_NotesList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_NotesList] UNIQUE NONCLUSTERED ([Name] asc) ,
CONSTRAINT [FK_NotesList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL BusinessOfferList
IF OBJECT_ID('[dbo].[BusinessOfferList]') IS NOT NULL
DROP TABLE [dbo].[BusinessOfferList]
GO
CREATE TABLE [dbo].[BusinessOfferList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[DocumentNumber] VARCHAR(20) NOT NULL,
[Supplier] VARCHAR(512) NOT NULL,
[Customer] VARCHAR(512) NOT NULL,
[OfferValidity] INT NOT NULL,
[Storned] BIT NOT NULL,
[TotalCurrencyId] INT NOT NULL,
[Description] TEXT NULL,
[TotalPriceWithVat] NUMERIC(10,2) NOT NULL,
[UserId] INT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_OfferList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_OfferList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_OfferList] UNIQUE NONCLUSTERED ([DocumentNumber] asc) ,
CONSTRAINT [FK_OfferList_CurrencyList1] FOREIGN KEY ([TotalCurrencyId]) REFERENCES [dbo].[BasicCurrencyList] (Id) ,
CONSTRAINT [FK_OfferList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
GO
CREATE NONCLUSTERED INDEX [IX_OfferList_Customer]
ON [dbo].[BusinessOfferList] ([Customer] asc)
TBL BusinessOfferSupportList
IF OBJECT_ID('[dbo].[BusinessOfferSupportList]') IS NOT NULL
DROP TABLE [dbo].[BusinessOfferSupportList]
GO
CREATE TABLE [dbo].[BusinessOfferSupportList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[DocumentNumber] VARCHAR(20) NOT NULL,
[PartNumber] VARCHAR(50) NULL,
[Name] VARCHAR(150) NOT NULL,
[Unit] VARCHAR(10) NOT NULL,
[PcsPrice] NUMERIC(10,2) NOT NULL,
[Count] NUMERIC(10,2) NOT NULL,
[TotalPrice] NUMERIC(10,2) NOT NULL,
[Vat] NUMERIC(10,2) NOT NULL,
[TotalPriceWithVat] NUMERIC(10,2) NOT NULL,
[UserId] INT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_OfferItemList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_OfferItemList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [FK_OfferItemList_OfferList] FOREIGN KEY ([DocumentNumber]) REFERENCES [dbo].[BusinessOfferList] (DocumentNumber) ON DELETE CASCADE ,
CONSTRAINT [FK_OfferItemList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
GO
CREATE NONCLUSTERED INDEX [IX_OfferItemList]
ON [dbo].[BusinessOfferSupportList] ([DocumentNumber] asc)
TBL BusinessOutgoingInvoiceList
IF OBJECT_ID('[dbo].[BusinessOutgoingInvoiceList]') IS NOT NULL
DROP TABLE [dbo].[BusinessOutgoingInvoiceList]
GO
CREATE TABLE [dbo].[BusinessOutgoingInvoiceList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[DocumentNumber] VARCHAR(20) NOT NULL,
[Supplier] VARCHAR(512) NOT NULL,
[Customer] VARCHAR(512) NOT NULL,
[IssueDate] DATETIME2 NOT NULL,
[TaxDate] DATETIME2 NOT NULL,
[MaturityDate] DATETIME2 NOT NULL,
[PaymentMethodId] INT NOT NULL,
[MaturityId] INT NOT NULL,
[OrderNumber] VARCHAR(50) NULL,
[Storned] BIT NOT NULL,
[PaymentStatusId] INT NOT NULL,
[TotalCurrencyId] INT NOT NULL,
[Description] TEXT NULL,
[TotalPriceWithVat] NUMERIC(10,2) NOT NULL,
[ReceiptId] INT NULL,
[CreditNoteId] INT NULL,
[UserId] INT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_OutgoingInvoiceList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_OutgoingInvoiceList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_OutgoingInvoiceList] UNIQUE NONCLUSTERED ([DocumentNumber] asc) ,
CONSTRAINT [FK_OutgoingInvoiceList_CreditNoteList] FOREIGN KEY ([CreditNoteId]) REFERENCES [dbo].[BusinessCreditNoteList] (Id) ON DELETE SET NULL ,
CONSTRAINT [FK_OutgoingInvoiceList_CurrencyList] FOREIGN KEY ([TotalCurrencyId]) REFERENCES [dbo].[BasicCurrencyList] (Id) ,
CONSTRAINT [FK_OutgoingInvoiceList_MaturityList] FOREIGN KEY ([MaturityId]) REFERENCES [dbo].[BusinessMaturityList] (Id) ,
CONSTRAINT [FK_OutgoingInvoiceList_PaymentMethodList] FOREIGN KEY ([PaymentMethodId]) REFERENCES [dbo].[BusinessPaymentMethodList] (Id) ,
CONSTRAINT [FK_OutgoingInvoiceList_PaymentStatusList] FOREIGN KEY ([PaymentStatusId]) REFERENCES [dbo].[BusinessPaymentStatusList] (Id) ,
CONSTRAINT [FK_OutgoingInvoiceList_ReceiptList] FOREIGN KEY ([ReceiptId]) REFERENCES [dbo].[BusinessReceiptList] (Id) ON DELETE SET NULL ,
CONSTRAINT [FK_OutgoingInvoiceList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
GO
CREATE NONCLUSTERED INDEX [IX_OutgoingInvoiceList_Customer]
ON [dbo].[BusinessOutgoingInvoiceList] ([Customer] asc)
TBL BusinessOutgoingInvoiceSupportList
IF OBJECT_ID('[dbo].[BusinessOutgoingInvoiceSupportList]') IS NOT NULL
DROP TABLE [dbo].[BusinessOutgoingInvoiceSupportList]
GO
CREATE TABLE [dbo].[BusinessOutgoingInvoiceSupportList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[DocumentNumber] VARCHAR(20) NOT NULL,
[PartNumber] VARCHAR(50) NULL,
[Name] VARCHAR(150) NOT NULL,
[Unit] VARCHAR(10) NOT NULL,
[PcsPrice] NUMERIC(10,2) NOT NULL,
[Count] NUMERIC(10,2) NOT NULL,
[TotalPrice] NUMERIC(10,2) NOT NULL,
[Vat] NUMERIC(10,2) NOT NULL,
[TotalPriceWithVat] NUMERIC(10,2) NOT NULL,
[UserId] INT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_OutgoingInvoiceItemList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_OutgoingInvoiceItemList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [FK_OutgoingInvoiceItemList_OutgoingInvoiceList] FOREIGN KEY ([DocumentNumber]) REFERENCES [dbo].[BusinessOutgoingInvoiceList] (DocumentNumber) ON DELETE CASCADE ,
CONSTRAINT [FK_OutgoingInvoiceItemList_UnitList] FOREIGN KEY ([Unit]) REFERENCES [dbo].[BasicUnitList] (Name) ,
CONSTRAINT [FK_OutgoingInvoiceItemList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
GO
CREATE NONCLUSTERED INDEX [IX_OutgoingInvoiceItemList]
ON [dbo].[BusinessOutgoingInvoiceSupportList] ([DocumentNumber] asc)
TBL BusinessOutgoingOrderList
IF OBJECT_ID('[dbo].[BusinessOutgoingOrderList]') IS NOT NULL
DROP TABLE [dbo].[BusinessOutgoingOrderList]
GO
CREATE TABLE [dbo].[BusinessOutgoingOrderList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[DocumentNumber] VARCHAR(20) NOT NULL,
[Customer] VARCHAR(512) NOT NULL,
[Supplier] VARCHAR(512) NOT NULL,
[Storned] BIT NOT NULL,
[TotalCurrencyId] INT NOT NULL,
[Description] TEXT NULL,
[TotalPriceWithVat] NUMERIC(10,2) NOT NULL,
[UserId] INT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_OutgoingOrderList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_OutgoingOrderList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_OutgoingOrderList] UNIQUE NONCLUSTERED ([DocumentNumber] asc) ,
CONSTRAINT [FK_OutgoingOrderList_CurrencyList] FOREIGN KEY ([TotalCurrencyId]) REFERENCES [dbo].[BasicCurrencyList] (Id) ,
CONSTRAINT [FK_OutgoingOrderList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
GO
CREATE NONCLUSTERED INDEX [IX_OutgoingOrderList_Supplier]
ON [dbo].[BusinessOutgoingOrderList] ([Supplier] asc)
TBL BusinessOutgoingOrderSupportList
IF OBJECT_ID('[dbo].[BusinessOutgoingOrderSupportList]') IS NOT NULL
DROP TABLE [dbo].[BusinessOutgoingOrderSupportList]
GO
CREATE TABLE [dbo].[BusinessOutgoingOrderSupportList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[DocumentNumber] VARCHAR(20) NOT NULL,
[PartNumber] VARCHAR(50) NULL,
[Name] VARCHAR(150) NOT NULL,
[Unit] VARCHAR(10) NOT NULL,
[PcsPrice] NUMERIC(10,2) NOT NULL,
[Count] NUMERIC(10,2) NOT NULL,
[TotalPrice] NUMERIC(10,2) NOT NULL,
[Vat] NUMERIC(10,2) NOT NULL,
[TotalPriceWithVat] NUMERIC(10,2) NOT NULL,
[UserId] INT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_OutgoingOrderItemList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_OutgoingOrderItemList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [FK_OutgoingOrderItemList_OutgoingOrderList] FOREIGN KEY ([DocumentNumber]) REFERENCES [dbo].[BusinessOutgoingOrderList] (DocumentNumber) ON DELETE CASCADE ,
CONSTRAINT [FK_OutgoingOrderItemList_UnitList] FOREIGN KEY ([Unit]) REFERENCES [dbo].[BasicUnitList] (Name) ,
CONSTRAINT [FK_OutgoingOrderItemList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
GO
CREATE NONCLUSTERED INDEX [IX_OutgoingOrderItemList]
ON [dbo].[BusinessOutgoingOrderSupportList] ([DocumentNumber] asc)
TBL BusinessPaymentMethodList
IF OBJECT_ID('[dbo].[BusinessPaymentMethodList]') IS NOT NULL
DROP TABLE [dbo].[BusinessPaymentMethodList]
GO
CREATE TABLE [dbo].[BusinessPaymentMethodList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[Name] VARCHAR(20) NOT NULL,
[Default] BIT NOT NULL,
[Description] TEXT NULL,
[AutoGenerateReceipt] BIT NOT NULL CONSTRAINT [DF_PaymentMethodList_AutoGenerateReceipt] DEFAULT ((0)),
[AllowGenerateReceipt] BIT NOT NULL CONSTRAINT [DF_PaymentMethodList_AllowGenerateReceipt] DEFAULT ((0)),
[UserId] INT NOT NULL,
[Active] BIT NOT NULL CONSTRAINT [DF_PaymentMethodList_Active] DEFAULT ((1)),
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_PaymentMethodList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_PaymentMethodList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_PaymentMethodList] UNIQUE NONCLUSTERED ([Name] asc) ,
CONSTRAINT [FK_PaymentMethodList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
GO
CREATE TRIGGER [dbo].[TR_PaymentMethodList] ON [dbo].[BusinessPaymentMethodList]
FOR INSERT, UPDATE, DELETE
AS
DECLARE @Operation VARCHAR(15)
IF EXISTS (SELECT 0 FROM inserted)
BEGIN
DECLARE @setDefault bit;DECLARE @RecId int;
SET NOCOUNT ON;
IF EXISTS (SELECT 0 FROM deleted)
BEGIN --UPDADE
SELECT @setDefault = ins.[Default] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BusinessPaymentMethodList SET [Default] = 0 WHERE Id <> @RecId;
END
END ELSE
BEGIN -- INSERT
SELECT @setDefault = ins.[Default] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BusinessPaymentMethodList SET [Default] = 0 WHERE Id <> @RecId;
END
END
END ELSE
BEGIN --DELETE
SELECT @setDefault = ins.[Default] from deleted ins;
SELECT @RecId = ins.Id from deleted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BusinessPaymentMethodList SET [Default] = 1
WHERE Id IN(SELECT TOP (1) Id FROM [dbo].BusinessPaymentMethodList WHERE Id <> @RecId)
;
END
END
GO
TBL BusinessPaymentStatusList
IF OBJECT_ID('[dbo].[BusinessPaymentStatusList]') IS NOT NULL
DROP TABLE [dbo].[BusinessPaymentStatusList]
GO
CREATE TABLE [dbo].[BusinessPaymentStatusList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[Name] VARCHAR(50) NOT NULL,
[Default] BIT NOT NULL,
[Description] TEXT NULL,
[UserId] INT NOT NULL,
[Active] BIT NOT NULL CONSTRAINT [DF_PaymentStatusList_Active] DEFAULT ((1)),
[Receipt] BIT NOT NULL CONSTRAINT [DF_PaymentStatusList_Receipt] DEFAULT ((0)),
[CreditNote] BIT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_PaymentStatusList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_PaymentStatusList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_PaymentStatusList] UNIQUE NONCLUSTERED ([Name] asc) ,
CONSTRAINT [FK_PaymentStatusList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
GO
CREATE TRIGGER [dbo].[TR_PaymentStatusList] ON [dbo].[BusinessPaymentStatusList]
FOR INSERT, UPDATE, DELETE
AS
DECLARE @Operation VARCHAR(15)
IF EXISTS (SELECT 0 FROM inserted)
BEGIN
DECLARE @setDefault bit;DECLARE @RecId int;
SET NOCOUNT ON;
IF EXISTS (SELECT 0 FROM deleted)
BEGIN --UPDADE
SELECT @setDefault = ins.[Default] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BusinessPaymentStatusList SET [Default] = 0 WHERE Id <> @RecId;
END
END ELSE
BEGIN -- INSERT
SELECT @setDefault = ins.[Default] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BusinessPaymentStatusList SET [Default] = 0 WHERE Id <> @RecId;
END
END
END ELSE
BEGIN --DELETE
SELECT @setDefault = ins.[Default] from deleted ins;
SELECT @RecId = ins.Id from deleted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BusinessPaymentStatusList SET [Default] = 1
WHERE Id IN(SELECT TOP (1) Id FROM [dbo].BusinessPaymentStatusList WHERE Id <> @RecId)
;
END
END
GO
CREATE TRIGGER [dbo].[TR_PaymentStatusListCreditNote] ON [dbo].[BusinessPaymentStatusList]
FOR INSERT, UPDATE, DELETE
AS
DECLARE @Operation VARCHAR(15)
IF EXISTS (SELECT 0 FROM inserted)
BEGIN
DECLARE @setCreditNote bit;DECLARE @RecId int;
SET NOCOUNT ON;
IF EXISTS (SELECT 0 FROM deleted)
BEGIN --UPDADE
SELECT @setCreditNote = ins.[CreditNote] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setCreditNote = 1) BEGIN
UPDATE [dbo].BusinessPaymentStatusList SET [CreditNote] = 0 WHERE Id <> @RecId;
END
END ELSE
BEGIN -- INSERT
SELECT @setCreditNote = ins.[CreditNote] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setCreditNote = 1) BEGIN
UPDATE [dbo].BusinessPaymentStatusList SET [CreditNote] = 0 WHERE Id <> @RecId;
END
END
END ELSE
BEGIN --DELETE
SELECT @setCreditNote = ins.[CreditNote] from deleted ins;
SELECT @RecId = ins.Id from deleted ins;
IF(@setCreditNote = 1) BEGIN
UPDATE [dbo].BusinessPaymentStatusList SET [CreditNote] = 1
WHERE Id IN(SELECT TOP (1) Id FROM [dbo].BusinessPaymentStatusList WHERE Id <> @RecId)
;
END
END
GO
CREATE TRIGGER [dbo].[TR_PaymentStatusListReceipt] ON [dbo].[BusinessPaymentStatusList]
FOR INSERT, UPDATE, DELETE
AS
DECLARE @Operation VARCHAR(15)
IF EXISTS (SELECT 0 FROM inserted)
BEGIN
DECLARE @setReceipt bit;DECLARE @RecId int;
SET NOCOUNT ON;
IF EXISTS (SELECT 0 FROM deleted)
BEGIN --UPDADE
SELECT @setReceipt = ins.[Receipt] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setReceipt = 1) BEGIN
UPDATE [dbo].BusinessPaymentStatusList SET [Receipt] = 0 WHERE Id <> @RecId;
END
END ELSE
BEGIN -- INSERT
SELECT @setReceipt = ins.[Receipt] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setReceipt = 1) BEGIN
UPDATE [dbo].BusinessPaymentStatusList SET [Receipt] = 0 WHERE Id <> @RecId;
END
END
END ELSE
BEGIN --DELETE
SELECT @setReceipt = ins.[Receipt] from deleted ins;
SELECT @RecId = ins.Id from deleted ins;
IF(@setReceipt = 1) BEGIN
UPDATE [dbo].BusinessPaymentStatusList SET [Receipt] = 1
WHERE Id IN(SELECT TOP (1) Id FROM [dbo].BusinessPaymentStatusList WHERE Id <> @RecId)
;
END
END
GO
TBL BusinessReceiptList
IF OBJECT_ID('[dbo].[BusinessReceiptList]') IS NOT NULL
DROP TABLE [dbo].[BusinessReceiptList]
GO
CREATE TABLE [dbo].[BusinessReceiptList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[DocumentNumber] VARCHAR(20) NOT NULL,
[InvoiceNumber] VARCHAR(20) NULL,
[Supplier] VARCHAR(512) NOT NULL,
[Customer] VARCHAR(512) NOT NULL,
[IssueDate] DATETIME2 NOT NULL,
[Storned] BIT NOT NULL,
[TotalCurrencyId] INT NOT NULL,
[Description] TEXT NULL,
[TotalPriceWithVat] NUMERIC(10,2) NOT NULL,
[UserId] INT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_ReceiptList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_ReceiptList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_ReceiptList] UNIQUE NONCLUSTERED ([DocumentNumber] asc) ,
CONSTRAINT [FK_ReceiptList_CurrencyList] FOREIGN KEY ([TotalCurrencyId]) REFERENCES [dbo].[BasicCurrencyList] (Id) ,
CONSTRAINT [FK_ReceiptList_OutgoingInvoiceList] FOREIGN KEY ([InvoiceNumber]) REFERENCES [dbo].[BusinessOutgoingInvoiceList] (DocumentNumber) ON DELETE SET NULL ,
CONSTRAINT [FK_ReceiptList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL BusinessReceiptSupportList
IF OBJECT_ID('[dbo].[BusinessReceiptSupportList]') IS NOT NULL
DROP TABLE [dbo].[BusinessReceiptSupportList]
GO
CREATE TABLE [dbo].[BusinessReceiptSupportList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[DocumentNumber] VARCHAR(20) NOT NULL,
[PartNumber] VARCHAR(50) NULL,
[Name] VARCHAR(150) NOT NULL,
[Unit] VARCHAR(10) NOT NULL,
[PcsPrice] NUMERIC(10,2) NOT NULL,
[Count] NUMERIC(10,2) NOT NULL,
[TotalPrice] NUMERIC(10,2) NOT NULL,
[Vat] NUMERIC(10,2) NOT NULL,
[TotalPriceWithVat] NUMERIC(10,2) NOT NULL,
[UserId] INT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_ReceiptItemList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_ReceiptItemList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [FK_ReceiptItemList_ReceiptList] FOREIGN KEY ([DocumentNumber]) REFERENCES [dbo].[BusinessReceiptList] (DocumentNumber) ON DELETE CASCADE ,
CONSTRAINT [FK_ReceiptItemList_UnitList] FOREIGN KEY ([Unit]) REFERENCES [dbo].[BasicUnitList] (Name) ,
CONSTRAINT [FK_ReceiptItemList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL BusinessWarehouseList
IF OBJECT_ID('[dbo].[BusinessWarehouseList]') IS NOT NULL
DROP TABLE [dbo].[BusinessWarehouseList]
GO
CREATE TABLE [dbo].[BusinessWarehouseList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[Name] VARCHAR(50) NOT NULL,
[Description] TEXT NULL,
[UserId] INT NOT NULL,
[AllowNegativeStatus] BIT NOT NULL,
[Default] BIT NOT NULL,
[LockedByStockTaking] BIT NOT NULL CONSTRAINT [DF_WarehouseList_IsLocked] DEFAULT ((0)),
[LastStockTaking] DATETIME2 NOT NULL CONSTRAINT [DF_WarehouseList_LastStockTaking] DEFAULT (getdate()),
[Active] BIT NOT NULL CONSTRAINT [DF_WarehouseList_Active] DEFAULT ((1)),
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_WarehouseList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_WarehouseList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_WarehouseList] UNIQUE NONCLUSTERED ([Name] asc) ,
CONSTRAINT [FK_WarehouseList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
GO
CREATE TRIGGER [dbo].[TR_WarehouseList] ON [dbo].[BusinessWarehouseList]
FOR INSERT, UPDATE, DELETE
AS
DECLARE @Operation VARCHAR(15)
IF EXISTS (SELECT 0 FROM inserted)
BEGIN
DECLARE @setDefault bit;DECLARE @RecId int;
SET NOCOUNT ON;
IF EXISTS (SELECT 0 FROM deleted)
BEGIN --UPDADE
SELECT @setDefault = ins.[Default] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BusinessWarehouseList SET [Default] = 0 WHERE Id <> @RecId;
END
END ELSE
BEGIN -- INSERT
SELECT @setDefault = ins.[Default] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BusinessWarehouseList SET [Default] = 0 WHERE Id <> @RecId;
END
END
END ELSE
BEGIN --DELETE
SELECT @setDefault = ins.[Default] from deleted ins;
SELECT @RecId = ins.Id from deleted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BusinessWarehouseList SET [Default] = 1
WHERE Id IN(SELECT TOP (1) Id FROM [dbo].BusinessWarehouseList WHERE Id <> @RecId)
;
END
END
GO
TBL DocSrvDocTemplateList
IF OBJECT_ID('[dbo].[DocSrvDocTemplateList]') IS NOT NULL
DROP TABLE [dbo].[DocSrvDocTemplateList]
GO
CREATE TABLE [dbo].[DocSrvDocTemplateList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[InheritedCodeType] VARCHAR(50) NOT NULL,
[GroupId] INT NOT NULL,
[Sequence] INT NOT NULL,
[Name] VARCHAR(50) NOT NULL,
[Description] TEXT NULL,
[Template] VARCHAR(max) NULL,
[UserId] INT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_DocSrvDocTemplateList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_DocSrvDocTemplateList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_DocSrvDocTemplateList] UNIQUE NONCLUSTERED ([Name] asc) ,
CONSTRAINT [FK_DocSrvDocTemplateList_DocSrvDocumentationGroupList] FOREIGN KEY ([GroupId]) REFERENCES [dbo].[DocSrvDocumentationGroupList] (Id) ,
CONSTRAINT [FK_DocSrvDocTemplateList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL DocSrvDocumentationCodeLibraryList
IF OBJECT_ID('[dbo].[DocSrvDocumentationCodeLibraryList]') IS NOT NULL
DROP TABLE [dbo].[DocSrvDocumentationCodeLibraryList]
GO
CREATE TABLE [dbo].[DocSrvDocumentationCodeLibraryList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[Name] VARCHAR(50) NOT NULL,
[Description] VARCHAR(2096) NULL,
[MdContent] TEXT NOT NULL,
[HtmlContent] TEXT NOT NULL,
[UserId] INT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_DocumentationCodeLibraryList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_DocumentationCodeLibraryList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_DocumentationCodeLibraryList] UNIQUE NONCLUSTERED ([Name] asc) ,
CONSTRAINT [FK_DocumentationCodeLibraryList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL DocSrvDocumentationGroupList
IF OBJECT_ID('[dbo].[DocSrvDocumentationGroupList]') IS NOT NULL
DROP TABLE [dbo].[DocSrvDocumentationGroupList]
GO
CREATE TABLE [dbo].[DocSrvDocumentationGroupList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[Name] VARCHAR(50) NOT NULL,
[Sequence] INT NOT NULL,
[Description] TEXT NULL,
[UserId] INT NOT NULL,
[Active] BIT NOT NULL CONSTRAINT [DF_DocumentationGroupList_Active] DEFAULT ((1)),
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_DocumentationGroupList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_DocumentationGroupList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_DocumentationGroupList] UNIQUE NONCLUSTERED ([Name] asc) ,
CONSTRAINT [FK_DocumentationGroupList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL DocSrvDocumentationList
IF OBJECT_ID('[dbo].[DocSrvDocumentationList]') IS NOT NULL
DROP TABLE [dbo].[DocSrvDocumentationList]
GO
CREATE TABLE [dbo].[DocSrvDocumentationList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[DocumentationGroupId] INT NOT NULL,
[Name] VARCHAR(150) NOT NULL,
[Sequence] INT NOT NULL,
[Description] TEXT NULL,
[MdContent] TEXT NOT NULL,
[HtmlContent] TEXT NOT NULL,
[UserId] INT NOT NULL,
[Active] BIT NOT NULL CONSTRAINT [DF_DocumentationList_Active] DEFAULT ((1)),
[AutoVersion] INT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_DocumentationList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_DocumentationList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_DocumentationList] UNIQUE NONCLUSTERED ([Name] asc, [DocumentationGroupId] asc, [AutoVersion] asc, [TimeStamp] asc) ,
CONSTRAINT [FK_DocumentationList_DocumentationGroupList] FOREIGN KEY ([DocumentationGroupId]) REFERENCES [dbo].[DocSrvDocumentationGroupList] (Id) ,
CONSTRAINT [FK_DocumentationList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
GO
CREATE TRIGGER [dbo].[TR_DocumentationList] ON [dbo].[DocSrvDocumentationList]
FOR INSERT, UPDATE--, DELETE
AS
DECLARE @Operation VARCHAR(15)
IF EXISTS (SELECT 0 FROM inserted)
BEGIN
DECLARE @setActive bit;DECLARE @autoVersion int;DECLARE @RecId int;DECLARE @GroupId int;DECLARE @RecName varchar(150);
DECLARE @autoRemoveOld bit; DECLARE @UserId int;
SET @autoVersion = 0;SET @setActive = 1;SET @autoRemoveOld = 0;
SET NOCOUNT ON;
IF EXISTS (SELECT 0 FROM deleted)
BEGIN --UPDADE
SELECT @setActive = ins.[Active] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
SELECT @UserId = ins.UserId from inserted ins;
SELECT @GroupId = ins.DocumentationGroupId from inserted ins;
SELECT @RecName = ins.[Name] from inserted ins;
--GET AutoRemoveSetting
SELECT @autoRemoveOld = CAST(CAST(SUBSTRING(ss.[Value],1,10) as varchar(10)) as bit) FROM [dbo].[ServerSettingList] ss WHERE ss.[Key] = 'ServerDocsOldAutoRemoveEnabled';
IF(@setActive = 1) BEGIN
UPDATE [dbo].DocSrvDocumentationList SET [Active] = 0 WHERE Id <> @RecId AND [Name] = @RecName AND [DocumentationGroupId] = @GroupId;
END
--AutoRemove Older versions
IF(@autoRemoveOld = 1) BEGIN
DELETE FROM [dbo].DocSrvDocumentationList WHERE Id <> @RecId AND [Name] = @RecName AND [DocumentationGroupId] = @GroupId;
END
END ELSE
BEGIN -- INSERT
SELECT @setActive = ins.[Active] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
SELECT @UserId = ins.UserId from inserted ins;
SELECT @GroupId = ins.DocumentationGroupId from inserted ins;
SELECT @RecName = ins.[Name] from inserted ins;
--GET AutoRemoveSetting
SELECT @autoRemoveOld = CAST(CAST(SUBSTRING(ss.[Value],1,10) as varchar(10)) as bit) FROM [dbo].[ServerSettingList] ss WHERE ss.[Key] = 'ServerDocsOldAutoRemoveEnabled';
--AutoVersioning
SELECT @autoVersion = MAX(d.[AutoVersion]) + 1 FROM [dbo].DocSrvDocumentationList d WHERE d.[Name] = @RecName AND [DocumentationGroupId] = @GroupId;
IF (@autoVersion = 0 ) BEGIN SET @autoVersion = 1; END
UPDATE [dbo].DocSrvDocumentationList SET [AutoVersion] = @autoVersion WHERE Id = @RecId AND [DocumentationGroupId] = @GroupId;
IF(@setActive = 1) BEGIN
UPDATE [dbo].DocSrvDocumentationList SET [Active] = 0 WHERE Id <> @RecId AND [Name] = @RecName AND [DocumentationGroupId] = @GroupId;
END
--AutoRemove Older versions
IF(@autoRemoveOld = 1) BEGIN
DELETE FROM [dbo].DocSrvDocumentationList WHERE Id <> @RecId AND [Name] = @RecName AND [DocumentationGroupId] = @GroupId;
END
END
END
GO
TBL GithubSrvAuthLogList
IF OBJECT_ID('[dbo].[GithubSrvAuthLogList]') IS NOT NULL
DROP TABLE [dbo].[GithubSrvAuthLogList]
GO
CREATE TABLE [dbo].[GithubSrvAuthLogList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[IssueDate] DATETIME2 NOT NULL,
[Expires] DATETIME2 NOT NULL,
[IssueIp] NVARCHAR(max) NULL,
[LastIp] NVARCHAR(max) NULL,
[IsValid] BIT NOT NULL,
[UserId] INT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_GithubSrvAuthLogList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_GithubSrvAuthLogList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [FK_GithubSrvAuthLogList_UserId] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) ON DELETE CASCADE )
GO
CREATE NONCLUSTERED INDEX [IX_GithubSrvAuthLogList_UserId]
ON [dbo].[GithubSrvAuthLogList] ([UserId] asc)
TBL GithubSrvRepositoryList
IF OBJECT_ID('[dbo].[GithubSrvRepositoryList]') IS NOT NULL
DROP TABLE [dbo].[GithubSrvRepositoryList]
GO
CREATE TABLE [dbo].[GithubSrvRepositoryList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[UserId] INT NOT NULL,
[UserName] VARCHAR(150) NULL,
[Name] VARCHAR(150) NULL,
[Description] TEXT NULL,
[DefaultBranch] VARCHAR(1024) NULL,
[NumIssues] INT NOT NULL,
[NumOpenIssues] INT NOT NULL,
[NumPulls] INT NOT NULL,
[NumOpenPulls] INT NOT NULL,
[CreationDate] DATETIME2 NOT NULL,
[IsPrivate] BIT NOT NULL,
[IsMirror] BIT NOT NULL,
[Size] BIGINT NOT NULL,
[UpdateTime] DATETIME2 NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_GithubSrvRepositoryList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_GithubSrvRepositoryList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [FK_GithubSrvRepositoryList_SolutionUserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL GithubSrvSshKeyList
IF OBJECT_ID('[dbo].[GithubSrvSshKeyList]') IS NOT NULL
DROP TABLE [dbo].[GithubSrvSshKeyList]
GO
CREATE TABLE [dbo].[GithubSrvSshKeyList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[UserId] INT NOT NULL,
[KeyType] NVARCHAR(max) NULL,
[Fingerprint] NVARCHAR(max) NULL,
[PublicKey] NVARCHAR(max) NULL,
[ImportData] DATETIME2 NOT NULL,
[LastUse] DATETIME2 NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_GithubSrvSshKeyList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_GithubSrvSshKeyList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [FK_GithubSrvSshKeyList_UserId] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) ON DELETE CASCADE )
GO
CREATE NONCLUSTERED INDEX [IX_GithubSrvSshKeyList_UserId]
ON [dbo].[GithubSrvSshKeyList] ([UserId] asc)
TBL GithubSrvTeamList
IF OBJECT_ID('[dbo].[GithubSrvTeamList]') IS NOT NULL
DROP TABLE [dbo].[GithubSrvTeamList]
GO
CREATE TABLE [dbo].[GithubSrvTeamList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[Name] VARCHAR(150) NULL,
[Description] TEXT NULL,
[CreationDate] DATETIME2 NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_GithubSrvTeamList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_GithubSrvTeamList] PRIMARY KEY CLUSTERED ([Id] asc) )
TBL GithubSrvTeamRepositoryRoleList
IF OBJECT_ID('[dbo].[GithubSrvTeamRepositoryRoleList]') IS NOT NULL
DROP TABLE [dbo].[GithubSrvTeamRepositoryRoleList]
GO
CREATE TABLE [dbo].[GithubSrvTeamRepositoryRoleList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[TeamId] INT NOT NULL,
[RepositoryId] INT NOT NULL,
[AllowRead] BIT NOT NULL,
[AllowWrite] BIT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_GithubSrvTeamRepositoryRoleList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_GithubSrvTeamRepositoryRoleList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_GithubSrvTeamRepositoryRoleList] UNIQUE NONCLUSTERED ([TeamId] asc, [RepositoryId] asc) ,
CONSTRAINT [FK_GithubSrvTeamRepositoryRoleList_RepositoryId] FOREIGN KEY ([RepositoryId]) REFERENCES [dbo].[GithubSrvRepositoryList] (Id) ON DELETE CASCADE ,
CONSTRAINT [FK_GithubSrvTeamRepositoryRoleList_TeamId] FOREIGN KEY ([TeamId]) REFERENCES [dbo].[GithubSrvTeamList] (Id) ON DELETE CASCADE )
GO
CREATE NONCLUSTERED INDEX [IX_GithubSrvTeamRepositoryRoleList_RepositoryId]
ON [dbo].[GithubSrvTeamRepositoryRoleList] ([RepositoryId] asc)
TBL GithubSrvUserTeamRoleList
IF OBJECT_ID('[dbo].[GithubSrvUserTeamRoleList]') IS NOT NULL
DROP TABLE [dbo].[GithubSrvUserTeamRoleList]
GO
CREATE TABLE [dbo].[GithubSrvUserTeamRoleList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[TeamId] INT NOT NULL,
[IsAdmin] BIT NOT NULL,
[UserId] INT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_GithubSrvUserTeamRoleList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_GithubSrvUserTeamRoleList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_GithubSrvUserTeamRoleList] UNIQUE NONCLUSTERED ([TeamId] asc, [UserId] asc) ,
CONSTRAINT [FK_GithubSrvUserTeamRoleList_TeamId] FOREIGN KEY ([TeamId]) REFERENCES [dbo].[GithubSrvTeamList] (Id) ON DELETE CASCADE ,
CONSTRAINT [FK_GithubSrvUserTeamRoleList_UserId] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) ON DELETE CASCADE )
GO
CREATE NONCLUSTERED INDEX [IX_GithubSrvUserTeamRoleList_TeamId]
ON [dbo].[GithubSrvUserTeamRoleList] ([TeamId] asc)
TBL LicSrvLicenseActivationFailList
IF OBJECT_ID('[dbo].[LicSrvLicenseActivationFailList]') IS NOT NULL
DROP TABLE [dbo].[LicSrvLicenseActivationFailList]
GO
CREATE TABLE [dbo].[LicSrvLicenseActivationFailList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[IpAddress] VARCHAR(50) NOT NULL,
[UnlockCode] VARCHAR(50) NULL,
[PartNumber] VARCHAR(50) NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_LicenceActivationFailList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_LicenseActivationFailList] PRIMARY KEY CLUSTERED ([Id] asc) )
GO
CREATE NONCLUSTERED INDEX [IX_LicenseActivationFailList_PartNumber]
ON [dbo].[LicSrvLicenseActivationFailList] ([PartNumber] asc)
CREATE NONCLUSTERED INDEX [IX_LicenseActivationFailList_IpAddress]
ON [dbo].[LicSrvLicenseActivationFailList] ([IpAddress] asc)
TBL LicSrvLicenseAlgorithmList
IF OBJECT_ID('[dbo].[LicSrvLicenseAlgorithmList]') IS NOT NULL
DROP TABLE [dbo].[LicSrvLicenseAlgorithmList]
GO
CREATE TABLE [dbo].[LicSrvLicenseAlgorithmList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[AddressId] INT NOT NULL,
[ItemId] INT NOT NULL,
[Name] VARCHAR(30) NOT NULL,
[ValidFrom] DATE NULL,
[ValidTo] DATE NULL,
[Algorithm] VARCHAR(2000) NOT NULL,
[Description] TEXT NULL,
[LimitActive] BIT NOT NULL,
[ActivationLimit] INT NULL,
[UsedCount] INT NOT NULL,
[Active] BIT NOT NULL,
[UserId] INT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_LicSrvLicenseAlgorithmList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_LicSrvLicenseAlgorithmList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_LicSrvLicenseAlgorithmList] UNIQUE NONCLUSTERED ([Name] asc) ,
CONSTRAINT [FK_LicenseAlgorithmList_AddressList] FOREIGN KEY ([AddressId]) REFERENCES [dbo].[BusinessAddressList] (Id) ,
CONSTRAINT [FK_LicenseAlgorithmList_ItemList] FOREIGN KEY ([ItemId]) REFERENCES [dbo].[BasicItemList] (Id) ,
CONSTRAINT [FK_LicenseAlgorithmList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL LicSrvUsedLicenseList
IF OBJECT_ID('[dbo].[LicSrvUsedLicenseList]') IS NOT NULL
DROP TABLE [dbo].[LicSrvUsedLicenseList]
GO
CREATE TABLE [dbo].[LicSrvUsedLicenseList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[AlgorithmName] VARCHAR(30) NOT NULL,
[PartNumber] VARCHAR(50) NOT NULL,
[UnlockCode] VARCHAR(50) NOT NULL,
[AddressId] INT NOT NULL,
[ItemId] INT NOT NULL,
[License] VARCHAR(50) NOT NULL,
[ActivateDate] DATETIME2 NOT NULL CONSTRAINT [DF_UsedLicenceList_ActivateDate] DEFAULT (getdate()),
[IpAddress] VARCHAR(50) NOT NULL,
CONSTRAINT [PK_UsedLicenseList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [FK_UsedLicenseList_AddressList] FOREIGN KEY ([AddressId]) REFERENCES [dbo].[BusinessAddressList] (Id) ,
CONSTRAINT [FK_UsedLicenseList_ItemList] FOREIGN KEY ([ItemId]) REFERENCES [dbo].[BasicItemList] (Id) )
TBL ProdGuidGroupList
IF OBJECT_ID('[dbo].[ProdGuidGroupList]') IS NOT NULL
DROP TABLE [dbo].[ProdGuidGroupList]
GO
CREATE TABLE [dbo].[ProdGuidGroupList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[Name] VARCHAR(50) NOT NULL,
[UserId] INT NOT NULL,
[Timestamp] DATETIME2 NOT NULL,
CONSTRAINT [PK_ProdGuidGroupList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_ProdGuidGroupList] UNIQUE NONCLUSTERED ([Name] asc) ,
CONSTRAINT [FK_ProdGuidGroupList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL ProdGuidOperationList
IF OBJECT_ID('[dbo].[ProdGuidOperationList]') IS NOT NULL
DROP TABLE [dbo].[ProdGuidOperationList]
GO
CREATE TABLE [dbo].[ProdGuidOperationList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[WorkPlace] INT NOT NULL,
[PartNumber] VARCHAR(50) NOT NULL,
[OperationNumber] INT NOT NULL,
[Note] VARCHAR(100) NOT NULL,
[PcsPerHour] INT NOT NULL,
[KcPerKs] NUMERIC(10,4) NOT NULL,
[UserId] INT NOT NULL,
[Timestamp] DATETIME2 NOT NULL,
CONSTRAINT [PK_ProdGuidOperationList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_ProdGuidOperationList] UNIQUE NONCLUSTERED ([WorkPlace] asc, [OperationNumber] asc) ,
CONSTRAINT [FK_ProdGuidOperationList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL ProdGuidPartList
IF OBJECT_ID('[dbo].[ProdGuidPartList]') IS NOT NULL
DROP TABLE [dbo].[ProdGuidPartList]
GO
CREATE TABLE [dbo].[ProdGuidPartList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[WorkPlace] INT NOT NULL,
[Number] VARCHAR(50) NOT NULL,
[Name] VARCHAR(100) NULL,
[UserId] INT NOT NULL,
[Timestamp] DATETIME2 NOT NULL,
CONSTRAINT [PK_ProdGuidPartList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_ProdGuidPartList] UNIQUE NONCLUSTERED ([WorkPlace] asc, [Number] asc) ,
CONSTRAINT [FK_ProdGuidPartList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL ProdGuidPersonList
IF OBJECT_ID('[dbo].[ProdGuidPersonList]') IS NOT NULL
DROP TABLE [dbo].[ProdGuidPersonList]
GO
CREATE TABLE [dbo].[ProdGuidPersonList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[GroupId] INT NOT NULL,
[PersonalNumber] INT NOT NULL,
[Name] VARCHAR(50) NOT NULL,
[SurName] VARCHAR(100) NOT NULL,
[UserId] INT NOT NULL,
[Timestamp] DATETIME2 NOT NULL,
CONSTRAINT [PK_ProdGuidPersonList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_ProdGuidPersonList] UNIQUE NONCLUSTERED ([PersonalNumber] asc) ,
CONSTRAINT [FK_ProdGuidPersonList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL ProdGuidWorkList
IF OBJECT_ID('[dbo].[ProdGuidWorkList]') IS NOT NULL
DROP TABLE [dbo].[ProdGuidWorkList]
GO
CREATE TABLE [dbo].[ProdGuidWorkList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[Date] DATETIME2 NOT NULL,
[PersonalNumber] INT NOT NULL,
[WorkPlace] INT NOT NULL,
[OperationNumber] INT NOT NULL,
[WorkTime] TIME NOT NULL,
[Pcs] INT NOT NULL,
[Amount] NUMERIC(10,2) NOT NULL,
[WorkPower] NUMERIC(10,2) NOT NULL,
[UserId] INT NOT NULL,
[Timestamp] DATETIME2 NOT NULL,
CONSTRAINT [PK_ProdGuidWorkList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [FK_ProdGuidWorkList_ProdGuidPersonList] FOREIGN KEY ([PersonalNumber]) REFERENCES [dbo].[ProdGuidPersonList] (PersonalNumber) ,
CONSTRAINT [FK_ProdGuidWorkList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL ProviderAutoGenServerReqList
IF OBJECT_ID('[dbo].[ProviderAutoGenServerReqList]') IS NOT NULL
DROP TABLE [dbo].[ProviderAutoGenServerReqList]
GO
CREATE TABLE [dbo].[ProviderAutoGenServerReqList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[IpAddress] VARCHAR(20) NOT NULL,
[Name] VARCHAR(100) NOT NULL,
[Description] TEXT NULL,
[UserId] INT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_ProviderAutoGenServerCreateRequest_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_ProviderAutoGenServerCreateRequest] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_ProviderAutoGenServerCreateRequest] UNIQUE NONCLUSTERED ([Name] asc) ,
CONSTRAINT [FK_ProviderAutoGenServerCreateRequest_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL ProviderGeneratedLicenseList
IF OBJECT_ID('[dbo].[ProviderGeneratedLicenseList]') IS NOT NULL
DROP TABLE [dbo].[ProviderGeneratedLicenseList]
GO
CREATE TABLE [dbo].[ProviderGeneratedLicenseList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[PartNumber] VARCHAR(50) NOT NULL,
[Type] VARCHAR(50) NOT NULL,
[Expiration] DATETIME2 NOT NULL,
[Description] TEXT NULL,
[UserId] INT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_ProviderGeneratedLicenseList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_ProviderGeneratedLicenseList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_ProviderGeneratedLicenseList] UNIQUE NONCLUSTERED ([PartNumber] asc) ,
CONSTRAINT [FK_ProviderGeneratedLicenseList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL ProviderGeneratedToolList
IF OBJECT_ID('[dbo].[ProviderGeneratedToolList]') IS NOT NULL
DROP TABLE [dbo].[ProviderGeneratedToolList]
GO
CREATE TABLE [dbo].[ProviderGeneratedToolList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[Name] VARCHAR(50) NOT NULL,
[Description] TEXT NULL,
[UserId] INT NOT NULL,
[Rating] INT NULL,
[DescActive] BIT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_GeneratedToolList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_GeneratedToolList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [FK_GeneratedToolList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
GO
CREATE NONCLUSTERED INDEX [IX_GeneratedToolList]
ON [dbo].[ProviderGeneratedToolList] ([Name] asc, [UserId] asc)
CREATE NONCLUSTERED INDEX [IX_GeneratedToolList_1]
ON [dbo].[ProviderGeneratedToolList] ([Name] asc)
CREATE NONCLUSTERED INDEX [IX_GeneratedToolList_2]
ON [dbo].[ProviderGeneratedToolList] ([UserId] asc)
TBL ProviderViewGeneratedToolRatingList
IF OBJECT_ID('[dbo].[ProviderViewGeneratedToolRatingList]') IS NOT NULL
DROP VIEW [dbo].[ProviderViewGeneratedToolRatingList]
GO
CREATE VIEW dbo.ProviderViewGeneratedToolRatingList
AS
SELECT Name, AVG(Rating) AS Rating, COUNT(Id) AS CountRating,
(SELECT COUNT(Id) AS Expr1
FROM dbo.ProviderGeneratedToolList AS gt
WHERE (Name = g.Name)) AS TotalCount
FROM dbo.ProviderGeneratedToolList AS g
WHERE (Rating IS NOT NULL)
GROUP BY Name
GO
TBL ServerApiSecurityList
IF OBJECT_ID('[dbo].[ServerApiSecurityList]') IS NOT NULL
DROP TABLE [dbo].[ServerApiSecurityList]
GO
CREATE TABLE [dbo].[ServerApiSecurityList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[InheritedApiType] VARCHAR(50) NOT NULL,
[Name] VARCHAR(50) NOT NULL,
[Description] TEXT NULL,
[UrlSubPath] VARCHAR(100) NULL,
[WriteAllowedRoles] VARCHAR(500) NULL,
[ReadAllowedRoles] VARCHAR(500) NULL,
[WriteRestrictedAccess] BIT NOT NULL,
[ReadRestrictedAccess] BIT NOT NULL CONSTRAINT [DF_ServerApiSecurityList_ReadRestrictedAccess] DEFAULT ((0)),
[RedirectPathOnError] VARCHAR(100) NULL,
[Active] BIT NOT NULL CONSTRAINT [DF_ServerApiSecurityList_Active] DEFAULT ((1)),
[UserId] INT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_ServerApiSecurityList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_ServerApiSecurityList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_ServerApiSecurityList_2] UNIQUE NONCLUSTERED ([UrlSubPath] asc) ,
CONSTRAINT [IX_ServerApiSecurityList] UNIQUE NONCLUSTERED ([Name] asc) ,
CONSTRAINT [FK_ServerApiSecurityList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL ServerCorsDefAllowedOriginList
IF OBJECT_ID('[dbo].[ServerCorsDefAllowedOriginList]') IS NOT NULL
DROP TABLE [dbo].[ServerCorsDefAllowedOriginList]
GO
CREATE TABLE [dbo].[ServerCorsDefAllowedOriginList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[AllowedDomain] VARCHAR(50) NOT NULL,
[Description] TEXT NULL,
[UserId] INT NOT NULL,
[Active] BIT NOT NULL CONSTRAINT [DF_ServerCorsDefAllowedOriginList_Active] DEFAULT ((1)),
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_ServerCorsDefAllowedOriginList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_ServerCorsDefAllowedOriginList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_ServerCorsDefAllowedOriginList] UNIQUE NONCLUSTERED ([AllowedDomain] asc) ,
CONSTRAINT [FK_ServerCorsDefAllowedOriginList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL ServerHealthCheckTaskList
IF OBJECT_ID('[dbo].[ServerHealthCheckTaskList]') IS NOT NULL
DROP TABLE [dbo].[ServerHealthCheckTaskList]
GO
CREATE TABLE [dbo].[ServerHealthCheckTaskList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[TaskName] VARCHAR(100) NOT NULL,
[Type] VARCHAR(50) NOT NULL,
[ServerDrive] VARCHAR(50) NULL,
[FolderPath] VARCHAR(1024) NULL,
[DbSqlConnection] VARCHAR(1024) NULL,
[IpAddress] VARCHAR(20) NULL,
[ServerUrlPath] VARCHAR(1024) NULL,
[UrlPath] VARCHAR(1024) NULL,
[SizeMB] INT NULL,
[Port] INT NULL,
[UserId] INT NOT NULL,
[Active] BIT NOT NULL CONSTRAINT [DF_HealthCheckTaskList_Active] DEFAULT ((1)),
[Timestamp] DATETIME2 NOT NULL CONSTRAINT [DF_HealthCheckTaskList_Timestamp] DEFAULT (getdate()),
CONSTRAINT [PK_HealthCheckTaskList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_HealthCheckTaskList] UNIQUE NONCLUSTERED ([TaskName] asc) ,
CONSTRAINT [FK_HealthCheckTaskList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL ServerLiveDataMonitorList
IF OBJECT_ID('[dbo].[ServerLiveDataMonitorList]') IS NOT NULL
DROP TABLE [dbo].[ServerLiveDataMonitorList]
GO
CREATE TABLE [dbo].[ServerLiveDataMonitorList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[RootPath] VARCHAR(1024) NOT NULL,
[FileExtensions] VARCHAR(1024) NOT NULL,
[Description] TEXT NULL,
[UserId] INT NOT NULL,
[Active] BIT NOT NULL CONSTRAINT [DF_ServerLiveDataMonitorList_Active] DEFAULT ((1)),
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_ServerLiveDataMonitorList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_ServerLiveDataMonitorList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_ServerLiveDataMonitorList] UNIQUE NONCLUSTERED ([RootPath] asc) ,
CONSTRAINT [FK_ServerLiveDataMonitorList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL ServerModuleAndServiceList
IF OBJECT_ID('[dbo].[ServerModuleAndServiceList]') IS NOT NULL
DROP TABLE [dbo].[ServerModuleAndServiceList]
GO
CREATE TABLE [dbo].[ServerModuleAndServiceList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[InheritedPageType] VARCHAR(50) NOT NULL,
[Name] VARCHAR(50) NOT NULL,
[InheritedLayoutType] VARCHAR(50) NULL CONSTRAINT [DF_ServerModuleAndServiceList_InheritedLayoutType] DEFAULT ('MultiLangLayout'),
[Description] TEXT NULL,
[UrlSubPath] VARCHAR(100) NULL,
[OptionalConfiguration] VARCHAR(2048) NULL,
[AllowedRoles] VARCHAR(500) NULL,
[RestrictedAccess] BIT NOT NULL,
[RedirectPathOnError] VARCHAR(100) NULL,
[CustomHtmlContent] TEXT NULL,
[IsLoginModule] BIT NOT NULL CONSTRAINT [DF_ServerModuleAndServiceList_IsLoginModule] DEFAULT ((0)),
[PathSetAllowed] BIT NOT NULL,
[RestrictionSetAllowed] BIT NOT NULL,
[HtmlSetAllowed] BIT NOT NULL,
[RedirectSetAllowed] BIT NOT NULL,
[Active] BIT NOT NULL CONSTRAINT [DF_ServerModuleAndServiceList_Active] DEFAULT ((1)),
[UserId] INT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_ServerModuleAndServiceList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_ServerModuleAndServiceList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_ServerModuleAndServiceList] UNIQUE NONCLUSTERED ([Name] asc) ,
CONSTRAINT [IX_ServerModuleAndServiceList_2] UNIQUE NONCLUSTERED ([UrlSubPath] asc) ,
CONSTRAINT [FK_ServerModuleAndServiceList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
GO
CREATE TRIGGER [dbo].[TR_ServerModuleAndServiceList] ON [dbo].[ServerModuleAndServiceList]
FOR INSERT, UPDATE, DELETE
AS
DECLARE @Operation VARCHAR(15)
IF EXISTS (SELECT 0 FROM inserted)
BEGIN
DECLARE @setIsLoginModule bit;DECLARE @RecId int;DECLARE @UrlSubPath VarChar(100);DECLARE @Type VarChar(50);DECLARE @ModulePathExist bit;
SET NOCOUNT ON;
IF EXISTS (SELECT 0 FROM deleted)
BEGIN --UPDADE
SET @ModulePathExist = 0;
SELECT @setIsLoginModule = ins.[IsLoginModule] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
SELECT @UrlSubPath = ins.UrlSubPath from inserted ins;
SELECT @Type = ins.[InheritedLayoutType] from inserted ins;
--CheckExisting Only One Allowed HTML Module
IF (@Type = 'FullHtmlPage' OR @Type = 'HtmlBodyOnly') BEGIN
SELECT @ModulePathExist = 1 FROM [dbo].[ServerModuleAndServiceList] WHERE UrlSubPath = @UrlSubPath;
IF (@ModulePathExist = 1) BEGIN
RAISERROR('Can Be Only One Endpoint for Html Module', 16, 1)
ROLLBACK TRANSACTION
RETURN
END
END
--Changing Login Module Set
IF(@setIsLoginModule = 1) BEGIN
UPDATE [dbo].ServerModuleAndServiceList SET [IsLoginModule] = 0 WHERE Id <> @RecId;
END
END ELSE
BEGIN -- INSERT
SET @ModulePathExist = 0;
SELECT @setIsLoginModule = ins.[IsLoginModule] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
SELECT @UrlSubPath = ins.UrlSubPath from inserted ins;
SELECT @Type = ins.[InheritedLayoutType] from inserted ins;
--CheckExisting Only One Allowed HTML Module
IF (@Type = 'FullHtmlPage' OR @Type = 'HtmlBodyOnly') BEGIN
SELECT @ModulePathExist = 1 FROM [dbo].[ServerModuleAndServiceList] WHERE UrlSubPath = @UrlSubPath;
IF (@ModulePathExist = 1) BEGIN
RAISERROR('Can Be Only One Endpoint for Html Module', 16, 1)
ROLLBACK TRANSACTION
RETURN
END
END
--Changing Login Module Set
IF(@setIsLoginModule = 1) BEGIN
UPDATE [dbo].ServerModuleAndServiceList SET [IsLoginModule] = 0 WHERE Id <> @RecId;
END
END
END ELSE
BEGIN --DELETE
SELECT @setIsLoginModule = ins.[IsLoginModule] from deleted ins;
SELECT @RecId = ins.Id from deleted ins;
--Changing Login Module Set
IF(@setIsLoginModule = 1) BEGIN
UPDATE [dbo].ServerModuleAndServiceList SET [IsLoginModule] = 1
WHERE Id IN(SELECT TOP (1) Id FROM [dbo].ServerModuleAndServiceList WHERE Id <> @RecId)
;
END
END
GO
TBL ServerSettingList
IF OBJECT_ID('[dbo].[ServerSettingList]') IS NOT NULL
DROP TABLE [dbo].[ServerSettingList]
GO
CREATE TABLE [dbo].[ServerSettingList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[InheritedGroupName] VARCHAR(50) NOT NULL,
[Type] VARCHAR(50) NOT NULL CONSTRAINT [DF_ServerSettingList_Type] DEFAULT ('bit'),
[Key] NVARCHAR(150) NOT NULL,
[Value] NVARCHAR(150) NOT NULL,
[Description] TEXT NULL,
[Link] VARCHAR(1024) NULL,
[UserId] INT NOT NULL,
[Active] BIT NOT NULL CONSTRAINT [DF_AdminConfiguration_Active] DEFAULT ((1)),
[Timestamp] DATETIME2 NOT NULL CONSTRAINT [DF_AdminConfiguration_CreateDate] DEFAULT (getdate()),
CONSTRAINT [PK_AdminConfiguration] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_ServerSettingList] UNIQUE NONCLUSTERED ([Key] asc) ,
CONSTRAINT [FK_ServerSettingList_SolutionUserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL ServerStaticOrMvcDefPathList
IF OBJECT_ID('[dbo].[ServerStaticOrMvcDefPathList]') IS NOT NULL
DROP TABLE [dbo].[ServerStaticOrMvcDefPathList]
GO
CREATE TABLE [dbo].[ServerStaticOrMvcDefPathList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[SystemName] VARCHAR(50) NOT NULL,
[WebRootSubPath] VARCHAR(2048) NOT NULL,
[AliasPath] VARCHAR(255) NULL,
[Description] TEXT NULL,
[IsBrowsable] BIT NOT NULL CONSTRAINT [DF_ServerStaticOrMvcDefPathList_IsBowsable] DEFAULT ((0)),
[IsStaticOrMvcDefOnly] BIT NOT NULL CONSTRAINT [DF_ServerStaticOrMvcDefPathList_IsStaticOrMvcDefOnly] DEFAULT ((0)),
[UserId] INT NOT NULL,
[Active] BIT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_ServerStaticOrMvcDefPathList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_ServerStaticOrMvcDefPathList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_ServerStaticOrMvcDefPathList] UNIQUE NONCLUSTERED ([SystemName] asc) ,
CONSTRAINT [FK_ServerStaticOrMvcDefPathList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL ServerToolPanelDefinitionList
IF OBJECT_ID('[dbo].[ServerToolPanelDefinitionList]') IS NOT NULL
DROP TABLE [dbo].[ServerToolPanelDefinitionList]
GO
CREATE TABLE [dbo].[ServerToolPanelDefinitionList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[ToolTypeId] INT NOT NULL,
[SystemName] VARCHAR(50) NOT NULL,
[Type] VARCHAR(50) NOT NULL,
[Command] VARCHAR(500) NOT NULL,
[IconName] VARCHAR(50) NOT NULL,
[IconColor] VARCHAR(50) NOT NULL,
[BackgroundColor] VARCHAR(50) NOT NULL,
[Description] TEXT NULL,
[UserId] INT NOT NULL,
[Timestamp] DATETIME2 NOT NULL CONSTRAINT [DF_ServerToolPanelDefinitionList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_ServerToolPanelDefinitionList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_ServerToolPanelDefinitionList] UNIQUE NONCLUSTERED ([SystemName] asc) ,
CONSTRAINT [FK_ServerToolPanelDefinitionList_ToolTypeList] FOREIGN KEY ([ToolTypeId]) REFERENCES [dbo].[ServerToolTypeList] (Id) ,
CONSTRAINT [FK_ServerToolPanelDefinitionList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL ServerToolTypeList
IF OBJECT_ID('[dbo].[ServerToolTypeList]') IS NOT NULL
DROP TABLE [dbo].[ServerToolTypeList]
GO
CREATE TABLE [dbo].[ServerToolTypeList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[Sequence] INT NOT NULL,
[Name] VARCHAR(50) NOT NULL,
[Description] TEXT NULL,
[UserId] INT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_ServerToolTypeList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_ServerToolTypeList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_ServerToolTypeList] UNIQUE NONCLUSTERED ([Name] asc) ,
CONSTRAINT [FK_ServerToolTypeList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL SolutionEmailerHistoryList
IF OBJECT_ID('[dbo].[SolutionEmailerHistoryList]') IS NOT NULL
DROP TABLE [dbo].[SolutionEmailerHistoryList]
GO
CREATE TABLE [dbo].[SolutionEmailerHistoryList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[Recipient] VARCHAR(1024) NOT NULL,
[Subject] VARCHAR(1024) NOT NULL,
[Email] TEXT NULL,
[Status] VARCHAR(2048) NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_SolutionEmailerHistoryList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_SolutionEmailerHistoryList] PRIMARY KEY CLUSTERED ([Id] asc) )
GO
CREATE TRIGGER [dbo].[TR_SolutionEmailerHistoryList] ON [dbo].[SolutionEmailerHistoryList]
FOR INSERT
AS
IF EXISTS (SELECT 0 FROM inserted)
BEGIN
SET NOCOUNT ON;
IF EXISTS (SELECT 0 FROM deleted)
BEGIN --UPDATE
SET NOCOUNT ON;
END ELSE
BEGIN -- INSERT
EXEC [dbo].[SpAutoCleanEmailer];
END
END
GO
TBL SolutionEmailTemplateList
IF OBJECT_ID('[dbo].[SolutionEmailTemplateList]') IS NOT NULL
DROP TABLE [dbo].[SolutionEmailTemplateList]
GO
CREATE TABLE [dbo].[SolutionEmailTemplateList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[SystemLanguageId] INT NOT NULL,
[TemplateName] VARCHAR(50) NOT NULL,
[Variables] TEXT NOT NULL,
[Subject] VARCHAR(255) NOT NULL,
[Email] TEXT NULL,
[UserId] INT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_EmailTemplateList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_EmailTemplateList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_EmailTemplateList] UNIQUE NONCLUSTERED ([SystemLanguageId] asc, [TemplateName] asc) ,
CONSTRAINT [FK_EmailTemplateList_SystemLanguageList] FOREIGN KEY ([SystemLanguageId]) REFERENCES [dbo].[SolutionLanguageList] (Id) ,
CONSTRAINT [FK_EmailTemplateList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL SolutionFailList
IF OBJECT_ID('[dbo].[SolutionFailList]') IS NOT NULL
DROP TABLE [dbo].[SolutionFailList]
GO
CREATE TABLE [dbo].[SolutionFailList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[Source] VARCHAR(50) NOT NULL,
[UserName] VARCHAR(50) NULL,
[LogLevel] VARCHAR(20) NULL,
[Message] TEXT NOT NULL,
[ImageName] VARCHAR(150) NULL,
[Image] VARBINARY(max) NULL,
[AttachmentName] VARCHAR(150) NULL,
[Attachment] VARBINARY(max) NULL,
[UserId] INT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_SolutionFailList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_SolutionFailList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [FK_SolutionFailList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL SolutionLanguageList
IF OBJECT_ID('[dbo].[SolutionLanguageList]') IS NOT NULL
DROP TABLE [dbo].[SolutionLanguageList]
GO
CREATE TABLE [dbo].[SolutionLanguageList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[SystemName] VARCHAR(50) NOT NULL,
[Description] TEXT NULL,
[UserId] INT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_ServerLanguageList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_ServerLanguageList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_ServerLanguageList] UNIQUE NONCLUSTERED ([SystemName] asc) ,
CONSTRAINT [FK_ServerLanguageList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL SolutionMessageModuleList
IF OBJECT_ID('[dbo].[SolutionMessageModuleList]') IS NOT NULL
DROP TABLE [dbo].[SolutionMessageModuleList]
GO
CREATE TABLE [dbo].[SolutionMessageModuleList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[Level] INT NOT NULL CONSTRAINT [DF_SolutionMessageModuleList_Level] DEFAULT ((0)),
[MessageParentId] INT NULL,
[MessageTypeId] INT NOT NULL,
[Subject] VARCHAR(150) NOT NULL,
[HtmlMessage] TEXT NOT NULL,
[Shown] BIT NOT NULL,
[Archived] BIT NOT NULL,
[IsSystemMessage] BIT NOT NULL,
[Published] BIT NOT NULL CONSTRAINT [DF_SolutionMessageModuleList_Publish] DEFAULT ((0)),
[FromUserId] INT NULL,
[ToUserId] INT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_SolutionMessageModuleList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_SolutionMessageModuleList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_SolutionMessageModuleList] UNIQUE NONCLUSTERED ([Subject] asc) ,
CONSTRAINT [FK_SolutionMessageModuleList_SolutionMessageModuleListParent] FOREIGN KEY ([MessageParentId]) REFERENCES [dbo].[SolutionMessageModuleList] (Id) ,
CONSTRAINT [FK_SolutionMessageModuleList_SolutionMessageTypeList] FOREIGN KEY ([MessageTypeId]) REFERENCES [dbo].[SolutionMessageTypeList] (Id) ,
CONSTRAINT [FK_SolutionMessageModuleList_SolutionUserListFrom] FOREIGN KEY ([FromUserId]) REFERENCES [dbo].[SolutionUserList] (Id) ,
CONSTRAINT [FK_SolutionMessageModuleList_SolutionUserListTo] FOREIGN KEY ([ToUserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL SolutionMessageTypeList
IF OBJECT_ID('[dbo].[SolutionMessageTypeList]') IS NOT NULL
DROP TABLE [dbo].[SolutionMessageTypeList]
GO
CREATE TABLE [dbo].[SolutionMessageTypeList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[Name] VARCHAR(50) NOT NULL,
[Variables] TEXT NULL,
[AnswerAllowed] BIT NOT NULL CONSTRAINT [DF_SolutionMessageTypeList_AnswerEnabled] DEFAULT ((0)),
[IsSystemOnly] BIT NOT NULL CONSTRAINT [DF_SolutionMessageTypeList_IsSystemOnly] DEFAULT ((0)),
[Description] TEXT NULL,
[UserId] INT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_SolutionMessageTypeList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_SolutionMessageTypeList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_SolutionMessageTypeList] UNIQUE NONCLUSTERED ([Name] asc) ,
CONSTRAINT [FK_SolutionMessageTypeList_SolutionUserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL SolutionMixedEnumList
IF OBJECT_ID('[dbo].[SolutionMixedEnumList]') IS NOT NULL
DROP TABLE [dbo].[SolutionMixedEnumList]
GO
CREATE TABLE [dbo].[SolutionMixedEnumList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[ItemsGroup] VARCHAR(50) NOT NULL,
[Name] VARCHAR(50) NOT NULL,
[Description] TEXT NULL,
[UserId] INT NOT NULL,
[Active] BIT NOT NULL CONSTRAINT [DF_GlobalMixedEnumList_Active] DEFAULT ((1)),
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_GlobalMixedEnumList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_GlobalMixedEnumList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_GlobalMixedEnumList] UNIQUE NONCLUSTERED ([ItemsGroup] asc, [Name] asc) ,
CONSTRAINT [FK_GlobalMixedEnumList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) ,
CONSTRAINT [FK_SolutionMixedEnumList_SolutionMixedEnumList] FOREIGN KEY ([Id]) REFERENCES [dbo].[SolutionMixedEnumList] (Id) )
GO
CREATE NONCLUSTERED INDEX [IX_SolutionMixedEnumList]
ON [dbo].[SolutionMixedEnumList] ([ItemsGroup] asc)
CREATE NONCLUSTERED INDEX [IX_SolutionMixedEnumList_1]
ON [dbo].[SolutionMixedEnumList] ([Name] asc)
TBL SolutionMottoList
IF OBJECT_ID('[dbo].[SolutionMottoList]') IS NOT NULL
DROP TABLE [dbo].[SolutionMottoList]
GO
CREATE TABLE [dbo].[SolutionMottoList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[SystemName] VARCHAR(50) NOT NULL,
[UserId] INT NOT NULL CONSTRAINT [DF_MottoList_UserId] DEFAULT ((1)),
[Timestamp] DATETIME2 NOT NULL CONSTRAINT [DF_MottoList_Timestamp] DEFAULT (getdate()),
CONSTRAINT [PK_MottoList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_MottoList] UNIQUE NONCLUSTERED ([SystemName] asc) ,
CONSTRAINT [FK_MottoList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL SolutionOperationList
IF OBJECT_ID('[dbo].[SolutionOperationList]') IS NOT NULL
DROP TABLE [dbo].[SolutionOperationList]
GO
CREATE TABLE [dbo].[SolutionOperationList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[InheritedTypeName] VARCHAR(50) NOT NULL,
[Name] VARCHAR(255) NOT NULL,
[InputData] TEXT NOT NULL,
[InheritedResultTypeName] VARCHAR(50) NOT NULL,
[Description] TEXT NULL,
[UserId] INT NOT NULL,
[Active] BIT NOT NULL CONSTRAINT [DF_SolutionOperationList_Active] DEFAULT ((1)),
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_SolutionOperationList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_SolutionOperationList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_SolutionOperationList] UNIQUE NONCLUSTERED ([Name] asc) ,
CONSTRAINT [FK_SolutionOperationList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL SolutionSchedulerList
IF OBJECT_ID('[dbo].[SolutionSchedulerList]') IS NOT NULL
DROP TABLE [dbo].[SolutionSchedulerList]
GO
CREATE TABLE [dbo].[SolutionSchedulerList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[InheritedGroupName] VARCHAR(50) NOT NULL,
[Name] VARCHAR(255) NOT NULL,
[Sequence] INT NOT NULL,
[Email] VARCHAR(255) NULL,
[Data] TEXT NOT NULL,
[Description] TEXT NULL,
[StartNowOnly] BIT NOT NULL,
[StartAt] DATETIME2 NULL,
[FinishAt] DATETIME2 NULL,
[Interval] INT NOT NULL,
[InheritedIntervalType] VARCHAR(50) NOT NULL,
[UserId] INT NOT NULL,
[Active] BIT NOT NULL CONSTRAINT [DF_GlobalAutoSchedulerList_Active] DEFAULT ((1)),
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_GlobalAutoSchedulerList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_SolutionSchedulerList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_SolutionSchedulerList] UNIQUE NONCLUSTERED ([Name] asc) ,
CONSTRAINT [FK_GlobalAutoSchedulerList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL SolutionSchedulerProcessList
IF OBJECT_ID('[dbo].[SolutionSchedulerProcessList]') IS NOT NULL
DROP TABLE [dbo].[SolutionSchedulerProcessList]
GO
CREATE TABLE [dbo].[SolutionSchedulerProcessList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[ScheduledTaskId] INT NOT NULL,
[ProcessData] TEXT NULL,
[ProcessLog] TEXT NULL,
[ProcessCrashed] BIT NOT NULL,
[ProcessCompleted] BIT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_SolutionSchedulerProcessList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_SolutionSchedulerProcessList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [FK_SolutionSchedulerProcessList_SolutionSchedulerList] FOREIGN KEY ([ScheduledTaskId]) REFERENCES [dbo].[SolutionSchedulerList] (Id) ON DELETE CASCADE )
TBL SolutionStaticFileList
IF OBJECT_ID('[dbo].[SolutionStaticFileList]') IS NOT NULL
DROP TABLE [dbo].[SolutionStaticFileList]
GO
CREATE TABLE [dbo].[SolutionStaticFileList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[WebsiteId] INT NOT NULL,
[StaticPathId] INT NOT NULL,
[FileNamePath] VARCHAR(512) NOT NULL,
[MimeType] VARCHAR(150) NOT NULL,
[Content] VARBINARY(max) NULL,
[Active] BIT NOT NULL CONSTRAINT [DF_SolutionStaticFileList_Active] DEFAULT ((1)),
[UserId] INT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_SolutionStaticFileList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_SolutionStaticFileList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_SolutionStaticFileList] UNIQUE NONCLUSTERED ([FileNamePath] asc, [UserId] asc) ,
CONSTRAINT [FK_SolutionStaticFileList_SolutionStaticFilePathList] FOREIGN KEY ([StaticPathId]) REFERENCES [dbo].[SolutionStaticFilePathList] (Id) ON DELETE CASCADE ,
CONSTRAINT [FK_SolutionStaticFileList_SolutionWebsiteList] FOREIGN KEY ([WebsiteId]) REFERENCES [dbo].[SolutionWebsiteList] (Id) ,
CONSTRAINT [FK_SolutionStaticFileList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL SolutionStaticFilePathList
IF OBJECT_ID('[dbo].[SolutionStaticFilePathList]') IS NOT NULL
DROP TABLE [dbo].[SolutionStaticFilePathList]
GO
CREATE TABLE [dbo].[SolutionStaticFilePathList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[WebsiteId] INT NOT NULL,
[Path] VARCHAR(512) NOT NULL,
[Size] INT NOT NULL,
[Active] BIT NOT NULL CONSTRAINT [DF_SolutionStaticFilePathList_Active] DEFAULT ((1)),
[UserId] INT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_SolutionStaticFilePathList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_SolutionStaticFilePathList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_SolutionStaticFilePathList] UNIQUE NONCLUSTERED ([Path] asc, [UserId] asc) ,
CONSTRAINT [FK_SolutionStaticFilePathList_SolutionWebsiteList] FOREIGN KEY ([WebsiteId]) REFERENCES [dbo].[SolutionWebsiteList] (Id) ON DELETE CASCADE ,
CONSTRAINT [FK_SolutionStaticFilePathList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL SolutionTaskList
IF OBJECT_ID('[dbo].[SolutionTaskList]') IS NOT NULL
DROP TABLE [dbo].[SolutionTaskList]
GO
CREATE TABLE [dbo].[SolutionTaskList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[InheritedTargetType] VARCHAR(50) NOT NULL,
[InheritedStatusType] VARCHAR(50) NOT NULL,
[Message] TEXT NOT NULL,
[Documentation] TEXT NOT NULL,
[ImageName] VARCHAR(150) NULL,
[Image] VARBINARY(max) NULL,
[AttachmentName] VARCHAR(150) NULL,
[Attachment] VARBINARY(max) NULL,
[UserId] INT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_SolutionTaskList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_SolutionTaskList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [FK_SolutionTaskList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
GO
CREATE NONCLUSTERED INDEX [IX_SolutionTaskList]
ON [dbo].[SolutionTaskList] ([InheritedTargetType] asc)
CREATE NONCLUSTERED INDEX [IX_SolutionTaskList_1]
ON [dbo].[SolutionTaskList] ([InheritedTargetType] asc, [InheritedStatusType] asc)
CREATE NONCLUSTERED INDEX [IX_SolutionTaskList_2]
ON [dbo].[SolutionTaskList] ([InheritedStatusType] asc)
TBL SolutionUserList
IF OBJECT_ID('[dbo].[SolutionUserList]') IS NOT NULL
DROP TABLE [dbo].[SolutionUserList]
GO
CREATE TABLE [dbo].[SolutionUserList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[RoleId] INT NOT NULL,
[UserName] VARCHAR(150) NOT NULL,
[Password] VARCHAR(2048) NOT NULL,
[Name] VARCHAR(150) NOT NULL,
[SurName] VARCHAR(150) NOT NULL,
[InfoEmail] VARCHAR(255) NOT NULL CONSTRAINT [DF_SolutionUserList_InfoEmail] DEFAULT ('email@address.com'),
[Description] TEXT NULL,
[Active] BIT NOT NULL CONSTRAINT [DF_UserList_active] DEFAULT ((1)),
[Timestamp] DATETIME2 NOT NULL CONSTRAINT [DF_userList_timestamp] DEFAULT (getdate()),
[Token] VARCHAR(2048) NULL,
[Expiration] DATETIME2 NULL,
[Photo] VARBINARY(max) NULL,
[MimeType] VARCHAR(100) NULL,
[PhotoPath] VARCHAR(500) NULL,
CONSTRAINT [PK_username] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_UserList] UNIQUE NONCLUSTERED ([UserName] asc) ,
CONSTRAINT [FK_UserList_UserList] FOREIGN KEY ([Id]) REFERENCES [dbo].[SolutionUserList] (Id) ,
CONSTRAINT [FK_UserList_UserRoleList] FOREIGN KEY ([RoleId]) REFERENCES [dbo].[SolutionUserRoleList] (Id) ON UPDATE CASCADE ON DELETE CASCADE )
GO
CREATE TRIGGER [dbo].[TR_UserList] ON dbo.SolutionUserList
FOR INSERT
AS
IF EXISTS (SELECT 0 FROM inserted)
BEGIN
DECLARE @UserId int;
SET NOCOUNT ON;
IF EXISTS (SELECT 0 FROM deleted)
BEGIN --UPDADE
SELECT @UserId = ins.Id from inserted ins;
END ELSE
BEGIN -- INSERT
SELECT @UserId = ins.Id from inserted ins;
INSERT INTO [dbo].[SystemParameterList]([UserId],[SystemName],[Value],[Type],[Description])
SELECT @UserId, pa.[SystemName],pa.[Value],pa.[Type],pa.[Description]
FROM [dbo].[SystemParameterList] pa
WHERE pa.UserId IS NULL;
END
END /* ELSE
BEGIN --DELETE
SELECT @setActive = ins.[Active] from deleted ins;
SELECT @RecId = ins.Id from deleted ins;
SELECT @RecName = ins.[Name] from deleted ins;
IF(@setActive = 1) BEGIN
UPDATE [dbo].DocumentationList SET [Active] = 1
WHERE Id IN(SELECT TOP (1) MAX(d.Id) FROM [dbo].DocumentationList d WHERE d.Id <> @RecId AND d.[Name] = @RecName)
;
END
END
*/
GO
TBL SolutionUserRoleList
IF OBJECT_ID('[dbo].[SolutionUserRoleList]') IS NOT NULL
DROP TABLE [dbo].[SolutionUserRoleList]
GO
CREATE TABLE [dbo].[SolutionUserRoleList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[SystemName] VARCHAR(50) NOT NULL,
[MinimalAccessValue] INT NOT NULL CONSTRAINT [DF_SolutionUserRoleList_SequenceAccessNumber] DEFAULT ((0)),
[Description] TEXT NULL,
[UserId] INT NULL,
[Timestamp] DATETIME2 NOT NULL CONSTRAINT [DF_UserRoleList_timestamp] DEFAULT (getdate()),
CONSTRAINT [PK_UserRoleList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_UserRoleList] UNIQUE NONCLUSTERED ([SystemName] asc) )
TBL SolutionWebsiteList
IF OBJECT_ID('[dbo].[SolutionWebsiteList]') IS NOT NULL
DROP TABLE [dbo].[SolutionWebsiteList]
GO
CREATE TABLE [dbo].[SolutionWebsiteList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[WebsiteName] VARCHAR(50) NOT NULL,
[Description] TEXT NULL,
[MinimalReadAccessValue] INT NOT NULL CONSTRAINT [DF_SolutionWebsiteList_MinimalReadAccessValue] DEFAULT ((0)),
[MinimalWriteAccessValue] INT NOT NULL CONSTRAINT [DF_SolutionWebsiteList_MinimalWriteAccessValue] DEFAULT ((0)),
[UserId] INT NOT NULL,
[Active] BIT NOT NULL CONSTRAINT [DF_SolutionWebsiteList_Active] DEFAULT ((1)),
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_SolutionWebsiteList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_SolutionWebsiteList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_SolutionWebsiteList] UNIQUE NONCLUSTERED ([WebsiteName] asc) ,
CONSTRAINT [FK_SolutionWebsiteList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL SystemCustomPageList
IF OBJECT_ID('[dbo].[SystemCustomPageList]') IS NOT NULL
DROP TABLE [dbo].[SystemCustomPageList]
GO
CREATE TABLE [dbo].[SystemCustomPageList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[PageName] VARCHAR(250) NOT NULL,
[Description] TEXT NULL,
[IsMultiFormType] BIT NOT NULL,
[IsServerUrl] BIT NOT NULL,
[StartupUrl] VARCHAR(512) NULL,
[IsWebServer] BIT NOT NULL,
[StartupSubFolder] VARCHAR(150) NULL,
[StartupCommand] VARCHAR(500) NULL,
[IsGraphType] BIT NOT NULL,
[Active] BIT NOT NULL,
[UserId] INT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_SystemCustomPageList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_SystemCustomPageList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_SystemCustomPageList] UNIQUE NONCLUSTERED ([PageName] asc) ,
CONSTRAINT [FK_SystemCustomPageList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL SystemDocumentAdviceList
IF OBJECT_ID('[dbo].[SystemDocumentAdviceList]') IS NOT NULL
DROP TABLE [dbo].[SystemDocumentAdviceList]
GO
CREATE TABLE [dbo].[SystemDocumentAdviceList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[BranchId] INT NOT NULL,
[DocumentType] VARCHAR(50) NOT NULL,
[Prefix] VARCHAR(10) NOT NULL,
[Number] VARCHAR(10) NOT NULL,
[StartDate] DATE NOT NULL,
[EndDate] DATE NOT NULL,
[UserId] INT NOT NULL,
[Active] BIT NOT NULL CONSTRAINT [DF_DocumentAdvice_Active] DEFAULT ((1)),
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_DocumentAdvice_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_DocumentAdvice] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [FK_DocumentAdvice_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) ,
CONSTRAINT [FK_DocumentAdviceList_BranchList] FOREIGN KEY ([BranchId]) REFERENCES [dbo].[BusinessBranchList] (Id) ,
CONSTRAINT [FK_DocumentAdviceList_DocumentTypeList] FOREIGN KEY ([DocumentType]) REFERENCES [dbo].[SystemDocumentTypeList] (SystemName) )
GO
CREATE NONCLUSTERED INDEX [IX_DocumentAdviceList]
ON [dbo].[SystemDocumentAdviceList] ([BranchId] asc, [DocumentType] asc)
TBL SystemDocumentTypeList
IF OBJECT_ID('[dbo].[SystemDocumentTypeList]') IS NOT NULL
DROP TABLE [dbo].[SystemDocumentTypeList]
GO
CREATE TABLE [dbo].[SystemDocumentTypeList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[SystemName] VARCHAR(50) NOT NULL CONSTRAINT [DF_DocumentTypeList_SystemName] DEFAULT ('MustProgramming'),
[Description] TEXT NULL,
[UserId] INT NOT NULL,
[Timestamp] DATETIME2 NOT NULL CONSTRAINT [DF_DocumentTypeList_Timestamp] DEFAULT (getdate()),
CONSTRAINT [PK_DocumentTypeList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_DocumentTypeList] UNIQUE NONCLUSTERED ([SystemName] asc) ,
CONSTRAINT [FK_DocumentTypeList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL SystemGroupMenuList
IF OBJECT_ID('[dbo].[SystemGroupMenuList]') IS NOT NULL
DROP TABLE [dbo].[SystemGroupMenuList]
GO
CREATE TABLE [dbo].[SystemGroupMenuList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[SystemName] VARCHAR(50) NOT NULL,
[Description] TEXT NULL,
[UserId] INT NOT NULL,
[Active] BIT NOT NULL CONSTRAINT [DF_SystemGroupMenuList_Active] DEFAULT ((1)),
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_SystemGroupMenuList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_SystemGroupMenuList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_SystemGroupMenuList] UNIQUE NONCLUSTERED ([SystemName] asc) ,
CONSTRAINT [FK_SystemGroupMenuList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL SystemIgnoredExceptionList
IF OBJECT_ID('[dbo].[SystemIgnoredExceptionList]') IS NOT NULL
DROP TABLE [dbo].[SystemIgnoredExceptionList]
GO
CREATE TABLE [dbo].[SystemIgnoredExceptionList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[ErrorNumber] VARCHAR(50) NOT NULL,
[Description] TEXT NULL,
[Active] BIT NOT NULL CONSTRAINT [DF_IgnoredExceptionList_Active] DEFAULT ((1)),
[UserId] INT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_IgnoredExceptionList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_IgnoredExceptionList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_IgnoredExceptionList] UNIQUE NONCLUSTERED ([ErrorNumber] asc) ,
CONSTRAINT [FK_IgnoredExceptionList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL SystemLoginHistoryList
IF OBJECT_ID('[dbo].[SystemLoginHistoryList]') IS NOT NULL
DROP TABLE [dbo].[SystemLoginHistoryList]
GO
CREATE TABLE [dbo].[SystemLoginHistoryList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[IpAddress] VARCHAR(50) NOT NULL,
[UserId] INT NOT NULL CONSTRAINT [DF_LoginHistoryList_UserId] DEFAULT ((0)),
[UserName] VARCHAR(150) NOT NULL,
[Timestamp] DATETIME2 NOT NULL CONSTRAINT [DF_LoginHistory_timestamp] DEFAULT (getdate()),
CONSTRAINT [PK_LoginHistory] PRIMARY KEY CLUSTERED ([Id] asc) )
GO
CREATE NONCLUSTERED INDEX [IX_LoginHistoryList]
ON [dbo].[SystemLoginHistoryList] ([IpAddress] asc)
CREATE NONCLUSTERED INDEX [IX_LoginHistoryList_1]
ON [dbo].[SystemLoginHistoryList] ([UserId] asc)
TBL SystemMenuList
IF OBJECT_ID('[dbo].[SystemMenuList]') IS NOT NULL
DROP TABLE [dbo].[SystemMenuList]
GO
CREATE TABLE [dbo].[SystemMenuList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[MenuType] VARCHAR(50) NOT NULL,
[GroupId] INT NOT NULL,
[FormPageName] VARCHAR(250) NOT NULL,
[AccessRole] VARCHAR(1024) NOT NULL,
[Description] TEXT NULL,
[UserId] INT NOT NULL,
[NotShowInMenu] BIT NOT NULL CONSTRAINT [DF_SystemMenuList_NotShowInMenu] DEFAULT ((0)),
[Active] BIT NOT NULL CONSTRAINT [DF_SystemMenuList_Active] DEFAULT ((1)),
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_SystemMenuList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_SystemMenuList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_GlobalMenuList] UNIQUE NONCLUSTERED ([FormPageName] asc) ,
CONSTRAINT [FK_SystemMenuList_SystemGroupMenuList] FOREIGN KEY ([GroupId]) REFERENCES [dbo].[SystemGroupMenuList] (Id) ,
CONSTRAINT [FK_SystemMenuList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL SystemModuleList
IF OBJECT_ID('[dbo].[SystemModuleList]') IS NOT NULL
DROP TABLE [dbo].[SystemModuleList]
GO
CREATE TABLE [dbo].[SystemModuleList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[ModuleType] VARCHAR(50) NOT NULL,
[Name] VARCHAR(255) NOT NULL,
[FolderPath] VARCHAR(255) NULL,
[FileName] VARCHAR(255) NULL,
[StartupCommand] VARCHAR(255) NULL,
[Description] TEXT NULL,
[ForegroundColor] VARCHAR(50) NOT NULL,
[BackgroundColor] VARCHAR(50) NOT NULL,
[IconName] VARCHAR(50) NOT NULL,
[IconColor] VARCHAR(50) NOT NULL,
[UserId] INT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_SystemModuleList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_SystemModuleList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_SystemModuleList] UNIQUE NONCLUSTERED ([Name] asc) ,
CONSTRAINT [FK_SystemModuleList_SystemModuleList] FOREIGN KEY ([Id]) REFERENCES [dbo].[SystemModuleList] (Id) ,
CONSTRAINT [FK_SystemModuleList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL SystemParameterList
IF OBJECT_ID('[dbo].[SystemParameterList]') IS NOT NULL
DROP TABLE [dbo].[SystemParameterList]
GO
CREATE TABLE [dbo].[SystemParameterList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[UserId] INT NULL,
[SystemName] VARCHAR(50) NOT NULL,
[Value] TEXT NOT NULL,
[Type] VARCHAR(50) NOT NULL,
[Description] TEXT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_ParameterList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_ParameterList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_ParameterList] UNIQUE NONCLUSTERED ([SystemName] asc, [UserId] asc) ,
CONSTRAINT [FK_ParameterList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) ON DELETE CASCADE )
GO
CREATE TRIGGER [dbo].[TR_ParameterList] ON dbo.SystemParameterList
FOR INSERT
AS
IF EXISTS (SELECT 0 FROM inserted)
BEGIN
DECLARE @UserId int;DECLARE @RecId int;DECLARE @SystemName varchar(50); DECLARE @Value varchar(max);
DECLARE @Type varchar(20); DECLARE @Description varchar(MAX);
SET NOCOUNT ON;
IF EXISTS (SELECT 0 FROM deleted)
BEGIN --UPDADE
SELECT @UserId = ins.UserId from inserted ins;
END ELSE
BEGIN -- INSERT
SELECT @RecId = ins.[Id] from inserted ins;
SELECT @UserId = ins.[UserId] from inserted ins;
SELECT @SystemName = ins.[SystemName] from inserted ins;
SELECT @Type = ins.[Type] from inserted ins;
SELECT @Value = CONVERT(varchar(MAX),p.[Value]), @Description = CONVERT(varchar(MAX),p.[Description]) from [dbo].[SystemParameterList] p WHERE p.Id = @RecId ;
IF (@UserId IS NULL) BEGIN
INSERT INTO [dbo].[SystemParameterList]([UserId],[SystemName],[Value],[Type],[Description])
SELECT DISTINCT pa.UserId, @SystemName, @Value, @Type, @Description
FROM [dbo].[SystemParameterList] pa
WHERE pa.UserId IS NOT NULL;
END
END
END /* ELSE
BEGIN --DELETE
SELECT @UserId = ins.[UserId] from inserted ins;
SELECT @SystemName = ins.[SystemName] from inserted ins;
IF (@UserId IS NULL) BEGIN
DELETE FROM [dbo].[SystemParameterList] WHERE [SystemName] = @SystemName;
END
END*/
GO
TBL SystemReportList
IF OBJECT_ID('[dbo].[SystemReportList]') IS NOT NULL
DROP TABLE [dbo].[SystemReportList]
GO
CREATE TABLE [dbo].[SystemReportList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[PageName] VARCHAR(50) NOT NULL,
[SystemName] VARCHAR(50) NOT NULL,
[JoinedId] BIT NOT NULL CONSTRAINT [DF_ReportList_JoinedId] DEFAULT ((0)),
[Description] TEXT NULL,
[ReportPath] VARCHAR(500) NULL,
[MimeType] VARCHAR(100) NOT NULL,
[File] VARBINARY(max) NOT NULL,
[UserId] INT NOT NULL,
[Active] BIT NOT NULL CONSTRAINT [DF_ReportList_Active] DEFAULT ((1)),
[Timestamp] DATETIME2 NOT NULL CONSTRAINT [DF_ReportList_TimeStamp] DEFAULT (getdate()),
[Default] BIT NOT NULL CONSTRAINT [DF_ReportList_Default] DEFAULT ((0)),
CONSTRAINT [PK_ReportList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [FK_ReportList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
GO
CREATE TRIGGER [dbo].[TR_ReportList] ON [dbo].[SystemReportList]
FOR INSERT, UPDATE, DELETE
AS
DECLARE @Operation VARCHAR(15)
IF EXISTS (SELECT 0 FROM inserted)
BEGIN
DECLARE @setDefault bit;DECLARE @RecId int;
SET NOCOUNT ON;
IF EXISTS (SELECT 0 FROM deleted)
BEGIN /* UPDADE */
SELECT @setDefault = ins.[Default] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].SystemReportList SET [Default] = 0 WHERE Id <> @RecId;
END
END ELSE
BEGIN /* INSERT */
SELECT @setDefault = ins.[Default] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].SystemReportList SET [Default] = 0 WHERE Id <> @RecId;
END
END
END ELSE
BEGIN /* DELETE */
SELECT @setDefault = ins.[Default] from deleted ins;
SELECT @RecId = ins.Id from deleted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].SystemReportList SET [Default] = 1
WHERE Id IN(SELECT TOP (1) Id FROM [dbo].SystemReportList WHERE Id <> @RecId)
;
END
END
GO
TBL SystemReportQueueList
IF OBJECT_ID('[dbo].[SystemReportQueueList]') IS NOT NULL
DROP TABLE [dbo].[SystemReportQueueList]
GO
CREATE TABLE [dbo].[SystemReportQueueList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[Name] VARCHAR(50) NOT NULL,
[Sequence] INT NOT NULL,
[Sql] NVARCHAR(max) NOT NULL,
[TableName] VARCHAR(150) NOT NULL,
[Filter] NVARCHAR(max) NULL,
[Search] VARCHAR(50) NULL,
[SearchColumnList] NVARCHAR(max) NULL,
[SearchFilterIgnore] BIT NOT NULL CONSTRAINT [DF_ReportQueue_SearchFilterIgnore] DEFAULT ((0)),
[RecId] INT NULL,
[RecIdFilterIgnore] BIT NOT NULL CONSTRAINT [DF_ReportQueue_RecIdFilterIgnore] DEFAULT ((0)),
[Timestamp] DATETIME2 NOT NULL CONSTRAINT [DF_ReportQueueList_Timestamp] DEFAULT (getdate()),
CONSTRAINT [PK_ReportQueue] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_ReportQueueList_1] UNIQUE NONCLUSTERED ([TableName] asc, [Sequence] asc) ,
CONSTRAINT [IX_ReportQueue] UNIQUE NONCLUSTERED ([Name] asc) )
GO
CREATE NONCLUSTERED INDEX [IX_ReportQueueList]
ON [dbo].[SystemReportQueueList] ([TableName] asc)
TBL SystemSvgIconList
IF OBJECT_ID('[dbo].[SystemSvgIconList]') IS NOT NULL
DROP TABLE [dbo].[SystemSvgIconList]
GO
CREATE TABLE [dbo].[SystemSvgIconList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[Name] VARCHAR(50) NOT NULL,
[SvgIconPath] VARCHAR(4096) NOT NULL,
[UserId] INT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_SvgIconList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_SvgIconList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_SvgIconList] UNIQUE NONCLUSTERED ([Name] asc) ,
CONSTRAINT [FK_SvgIconList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL SystemTranslationList
IF OBJECT_ID('[dbo].[SystemTranslationList]') IS NOT NULL
DROP TABLE [dbo].[SystemTranslationList]
GO
CREATE TABLE [dbo].[SystemTranslationList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[SystemName] VARCHAR(50) NOT NULL,
[DescriptionCz] VARCHAR(500) NULL,
[DescriptionEn] VARCHAR(500) NULL,
[UserId] INT NULL CONSTRAINT [DF_SystemTranslationList_UserId] DEFAULT ((0)),
[Timestamp] DATETIME2 NOT NULL CONSTRAINT [DF_SystemTranslationList_Timestamp] DEFAULT (getdate()),
CONSTRAINT [PK_SystemTranslationList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_SystemTranslationList] UNIQUE NONCLUSTERED ([SystemName] asc) ,
CONSTRAINT [FK_SystemTranslationList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
GO
CREATE TRIGGER [dbo].[TR_SystemTranslationList] ON [dbo].[SystemTranslationList]
FOR INSERT
AS
IF EXISTS (SELECT 0 FROM inserted)
BEGIN
DECLARE @UserId int;DECLARE @RecId int;
DECLARE @AutoFillDictionaries bit;
DECLARE @SystemName varchar(50);DECLARE @DescriptionCz varchar(500);DECLARE @DescriptionEn varchar(500);
SET @AutoFillDictionaries = 1;
SET NOCOUNT ON;
IF NOT EXISTS (SELECT 0 FROM deleted)
BEGIN -- INSERT
SELECT @RecId = ins.Id from inserted ins;
SELECT @UserId = ins.UserId from inserted ins;
SELECT @SystemName = ins.SystemName from inserted ins;
SELECT @DescriptionCz = ins.DescriptionCz from inserted ins;
SELECT @DescriptionEn = ins.DescriptionEn from inserted ins;
--GET AutoFilling Configuration
SELECT @AutoFillDictionaries = CAST(CAST(SUBSTRING(p.[Value],1,10) as varchar(10)) as bit) FROM [dbo].[SystemParameterList] p WHERE p.[UserId] IS NULL AND p.[SystemName] = 'ServerTranslationAutoFillEnabled';
IF (@AutoFillDictionaries = 1) BEGIN
IF(@DescriptionCz IS NULL OR LEN(@DescriptionCz) = 0) BEGIN SET @DescriptionCz = @SystemName; END
IF(@DescriptionEn IS NULL OR LEN(@DescriptionEn) = 0) BEGIN SET @DescriptionEn = @SystemName; END
UPDATE dbo.SystemTranslationList SET [DescriptionCz] = @DescriptionCz, [DescriptionEn] = @DescriptionEn WHERE Id = @RecId;
END
END
END
GO
TBL TemplateList
IF OBJECT_ID('[dbo].[TemplateList]') IS NOT NULL
DROP TABLE [dbo].[TemplateList]
GO
CREATE TABLE [dbo].[TemplateList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[GroupId] INT NOT NULL,
[Sequence] INT NOT NULL,
[Name] VARCHAR(50) NOT NULL,
[Description] TEXT NULL,
[UserId] INT NOT NULL,
[Default] BIT NOT NULL,
[Active] BIT NOT NULL CONSTRAINT [DF_TemplateList_Active] DEFAULT ((1)),
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_TemplateList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_TemplateList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_TemplateList] UNIQUE NONCLUSTERED ([Name] asc) ,
CONSTRAINT [FK_TemplateList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) ,
CONSTRAINT [FK_TemplateList_UserRoleList] FOREIGN KEY ([GroupId]) REFERENCES [dbo].[SolutionUserRoleList] (Id) )
TBL WebBannedIpAddressList
IF OBJECT_ID('[dbo].[WebBannedIpAddressList]') IS NOT NULL
DROP TABLE [dbo].[WebBannedIpAddressList]
GO
CREATE TABLE [dbo].[WebBannedIpAddressList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[IpAddress] VARCHAR(50) NOT NULL,
[Description] TEXT NULL,
[UserId] INT NOT NULL,
[Active] BIT NOT NULL CONSTRAINT [DF_WebBannedUserList_Active] DEFAULT ((1)),
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_WebBannedUserList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_WebBannedUserList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_WebBannedUserList] UNIQUE NONCLUSTERED ([IpAddress] asc) ,
CONSTRAINT [FK_WebBannedUserList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL WebCodeLibraryList
IF OBJECT_ID('[dbo].[WebCodeLibraryList]') IS NOT NULL
DROP TABLE [dbo].[WebCodeLibraryList]
GO
CREATE TABLE [dbo].[WebCodeLibraryList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[InheritedCodeType] VARCHAR(50) NULL,
[Name] VARCHAR(50) NOT NULL,
[Description] VARCHAR(2096) NULL,
[Content] VARCHAR(max) NOT NULL,
[IsCompletion] BIT NOT NULL CONSTRAINT [DF_WebCodeLibraryList_IsCompletion] DEFAULT ((0)),
[UserId] INT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_WebCodeLibraryList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_WebCodeLibraryList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_WebCodeLibraryList] UNIQUE NONCLUSTERED ([Name] asc) ,
CONSTRAINT [FK_WebCodeLibraryList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL WebConfiguratorList
IF OBJECT_ID('[dbo].[WebConfiguratorList]') IS NOT NULL
DROP TABLE [dbo].[WebConfiguratorList]
GO
CREATE TABLE [dbo].[WebConfiguratorList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[Name] VARCHAR(50) NOT NULL,
[IsStartupPage] BIT NOT NULL,
[Description] VARCHAR(max) NULL,
[HtmlContent] VARCHAR(max) NULL,
[ServerUrl] VARCHAR(500) NULL,
[AuthRole] VARCHAR(200) NULL,
[AuthIgnore] BIT NOT NULL,
[AuthRedirect] BIT NOT NULL,
[AuthRedirectUrl] VARCHAR(500) NULL,
[IncludedIdList] VARCHAR(500) NULL,
[Active] BIT NOT NULL CONSTRAINT [DF_WebConfiguratorList_Active] DEFAULT ((1)),
[UserId] INT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_WebConfiguratorList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_WebConfiguratorList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_WebConfiguratorList] UNIQUE NONCLUSTERED ([Name] asc) ,
CONSTRAINT [IX_WebConfiguratorList_1] UNIQUE NONCLUSTERED ([ServerUrl] asc) ,
CONSTRAINT [FK_WebConfiguratorList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL WebCoreFileList
IF OBJECT_ID('[dbo].[WebCoreFileList]') IS NOT NULL
DROP TABLE [dbo].[WebCoreFileList]
GO
CREATE TABLE [dbo].[WebCoreFileList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[SpecificationType] VARCHAR(50) NOT NULL,
[Sequence] INT NOT NULL,
[MetroPath] VARCHAR(100) NOT NULL CONSTRAINT [DF_WebCoreFileList_MetroPath] DEFAULT (''),
[FileName] VARCHAR(50) NOT NULL,
[Description] TEXT NULL,
[RewriteLowerLevel] BIT NOT NULL CONSTRAINT [DF_WebCoreFileList_RewriteLowerLevel] DEFAULT ((0)),
[GuestFileContent] TEXT NULL,
[UserFileContent] TEXT NULL,
[AdminFileContent] TEXT NULL,
[ProviderContent] TEXT NULL,
[IsUniquePath] BIT NOT NULL CONSTRAINT [DF_WebCoreFileList_IsUniquePath] DEFAULT ((0)),
[AutoUpdateOnSave] BIT NOT NULL,
[Active] BIT NOT NULL,
[UserId] INT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_WebCoreFileList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_WebCoreFileList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_WebCoreFileList] UNIQUE NONCLUSTERED ([FileName] asc, [SpecificationType] asc) ,
CONSTRAINT [FK_WebCoreFileList_GlobalUserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL WebDeveloperNewsList
IF OBJECT_ID('[dbo].[WebDeveloperNewsList]') IS NOT NULL
DROP TABLE [dbo].[WebDeveloperNewsList]
GO
CREATE TABLE [dbo].[WebDeveloperNewsList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[Title] VARCHAR(50) NOT NULL,
[Description] TEXT NULL,
[UserId] INT NOT NULL,
[Active] BIT NOT NULL CONSTRAINT [DF_WebDeveloperNewsList_Active] DEFAULT ((1)),
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_WebDeveloperNewsList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_WebDeveloperNewsList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_WebDeveloperNewsList] UNIQUE NONCLUSTERED ([Title] asc) ,
CONSTRAINT [FK_WebDeveloperNewsList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL WebDocumentationCodeLibraryList
IF OBJECT_ID('[dbo].[WebDocumentationCodeLibraryList]') IS NOT NULL
DROP TABLE [dbo].[WebDocumentationCodeLibraryList]
GO
CREATE TABLE [dbo].[WebDocumentationCodeLibraryList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[Name] VARCHAR(50) NOT NULL,
[Description] VARCHAR(2096) NULL,
[MdContent] TEXT NOT NULL,
[HtmlContent] TEXT NOT NULL,
[UserId] INT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_WebDocumentationCodeLibraryList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_WebDocumentationCodeLibraryList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_WebDocumentationCodeLibraryList] UNIQUE NONCLUSTERED ([Name] asc) ,
CONSTRAINT [FK_WebDocumentationCodeLibraryList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL WebDocumentationList
IF OBJECT_ID('[dbo].[WebDocumentationList]') IS NOT NULL
DROP TABLE [dbo].[WebDocumentationList]
GO
CREATE TABLE [dbo].[WebDocumentationList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[Name] VARCHAR(150) NOT NULL,
[Sequence] INT NOT NULL,
[Description] TEXT NULL,
[MdContent] TEXT NOT NULL,
[HtmlContent] TEXT NOT NULL,
[UserId] INT NOT NULL,
[Active] BIT NOT NULL CONSTRAINT [DF_WebDocumentationList_Active] DEFAULT ((1)),
[AutoVersion] INT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_WebDocumentationList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_WebDocumentationList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_WebDocumentationList] UNIQUE NONCLUSTERED ([Name] asc, [AutoVersion] asc, [TimeStamp] asc) ,
CONSTRAINT [FK_WebDocumentationList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
GO
CREATE TRIGGER [dbo].[TR_WebDocumentationList] ON [dbo].[WebDocumentationList]
FOR INSERT, UPDATE--, DELETE
AS
DECLARE @Operation VARCHAR(15)
IF EXISTS (SELECT 0 FROM inserted)
BEGIN
DECLARE @setActive bit;DECLARE @autoVersion int;DECLARE @RecId int;DECLARE @RecName varchar(150);
DECLARE @autoRemoveOld bit; DECLARE @UserId int;
SET @autoVersion = 0;SET @setActive = 1;SET @autoRemoveOld = 0;
SET NOCOUNT ON;
IF EXISTS (SELECT 0 FROM deleted)
BEGIN --UPDADE
SELECT @setActive = ins.[Active] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
SELECT @UserId = ins.UserId from inserted ins;
SELECT @RecName = ins.[Name] from inserted ins;
--GET AutoRemoveSetting
SELECT @autoRemoveOld = CAST(CAST(SUBSTRING(p.[Value],1,10) as varchar(10)) as bit) FROM [dbo].[SystemParameterList] p WHERE p.[UserId] = @UserId AND p.[SystemName] = 'WebDocsOldAutoRemoveEnabled';
IF(@setActive = 1) BEGIN
UPDATE [dbo].WebDocumentationList SET [Active] = 0 WHERE Id <> @RecId AND [Name] = @RecName;
END
--AutoRemove Older versions
IF(@autoRemoveOld = 1) BEGIN
DELETE FROM [dbo].WebDocumentationList WHERE Id <> @RecId AND [Name] = @RecName;
END
END ELSE
BEGIN -- INSERT
SELECT @setActive = ins.[Active] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
SELECT @UserId = ins.UserId from inserted ins;
SELECT @RecName = ins.[Name] from inserted ins;
--GET AutoRemoveSetting
SELECT @autoRemoveOld = CAST(CAST(SUBSTRING(p.[Value],1,10) as varchar(10)) as bit) FROM [dbo].[SystemParameterList] p WHERE p.[UserId] = @UserId AND p.[SystemName] = 'WebDocsOldAutoRemoveEnabled';
--AutoVersioning
SELECT @autoVersion = MAX(d.[AutoVersion]) + 1 FROM [dbo].WebDocumentationList d WHERE d.[Name] = @RecName;
IF (@autoVersion = 0 ) BEGIN SET @autoVersion = 1; END
UPDATE [dbo].WebDocumentationList SET [AutoVersion] = @autoVersion WHERE Id = @RecId;
IF(@setActive = 1) BEGIN
UPDATE [dbo].WebDocumentationList SET [Active] = 0 WHERE Id <> @RecId AND [Name] = @RecName;
END
--AutoRemove Older versions
IF(@autoRemoveOld = 1) BEGIN
DELETE FROM [dbo].WebDocumentationList WHERE Id <> @RecId AND [Name] = @RecName;
END
END
END /* ELSE
BEGIN --DELETE
SELECT @setActive = ins.[Active] from deleted ins;
SELECT @RecId = ins.Id from deleted ins;
SELECT @RecName = ins.[Name] from deleted ins;
IF(@setActive = 1) BEGIN
UPDATE [dbo].WebDocumentationList SET [Active] = 1
WHERE Id IN(SELECT TOP (1) MAX(d.Id) FROM [dbo].WebDocumentationList d WHERE d.Id <> @RecId AND d.[Name] = @RecName)
;
END
END
*/
GO
TBL WebGlobalPageBlockList
IF OBJECT_ID('[dbo].[WebGlobalPageBlockList]') IS NOT NULL
DROP TABLE [dbo].[WebGlobalPageBlockList]
GO
CREATE TABLE [dbo].[WebGlobalPageBlockList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[PagePartType] VARCHAR(50) NOT NULL,
[Sequence] INT NOT NULL,
[Name] VARCHAR(50) NOT NULL,
[Description] TEXT NULL,
[RewriteLowerLevel] BIT NOT NULL,
[GuestHtmlContent] TEXT NULL,
[UserHtmlContent] TEXT NULL,
[AdminHtmlContent] TEXT NULL,
[ProviderHtmlContent] TEXT NULL,
[Active] BIT NOT NULL,
[UserId] INT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_WebGlobalBodyBlockList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_WebGlobalBodyBlockList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_WebGlobalBodyBlockList] UNIQUE NONCLUSTERED ([Name] asc, [PagePartType] asc) ,
CONSTRAINT [FK_WebGlobalBodyBlockList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL WebGroupMenuList
IF OBJECT_ID('[dbo].[WebGroupMenuList]') IS NOT NULL
DROP TABLE [dbo].[WebGroupMenuList]
GO
CREATE TABLE [dbo].[WebGroupMenuList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[Sequence] INT NOT NULL,
[Onclick] VARCHAR(255) NULL,
[Name] VARCHAR(50) NOT NULL,
[UserId] INT NOT NULL,
[Active] BIT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_WebGroupMenuList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_WebGroupMenuList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_WebGroupMenuList] UNIQUE NONCLUSTERED ([Name] asc) ,
CONSTRAINT [FK_WebGroupMenuList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL WebMenuList
IF OBJECT_ID('[dbo].[WebMenuList]') IS NOT NULL
DROP TABLE [dbo].[WebMenuList]
GO
CREATE TABLE [dbo].[WebMenuList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[GroupId] INT NOT NULL,
[Sequence] INT NOT NULL,
[Name] VARCHAR(50) NOT NULL,
[MenuClass] VARCHAR(100) NULL,
[Description] VARCHAR(2096) NULL,
[HtmlContent] TEXT NOT NULL,
[UserMenu] BIT NOT NULL CONSTRAINT [DF_WebMenuList_UserRestriction] DEFAULT ((0)),
[AdminMenu] BIT NOT NULL CONSTRAINT [DF_WebMenuList_AdminMenu] DEFAULT ((0)),
[UserIPAddress] VARCHAR(50) NULL,
[UserId] INT NOT NULL,
[Active] BIT NOT NULL,
[Default] BIT NOT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_WebMenuList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_WebMenuList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_WebMenuList] UNIQUE NONCLUSTERED ([Name] asc, [GroupId] asc) ,
CONSTRAINT [FK_WebMenuList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) ,
CONSTRAINT [FK_WebMenuList_WebGroupMenuList] FOREIGN KEY ([GroupId]) REFERENCES [dbo].[WebGroupMenuList] (Id) )
GO
CREATE TRIGGER [dbo].[TR_WebMenuList] ON [dbo].[WebMenuList]
FOR INSERT, UPDATE, DELETE
AS
DECLARE @Operation VARCHAR(15)
IF EXISTS (SELECT 0 FROM inserted)
BEGIN
DECLARE @setDefault bit;DECLARE @RecId int;
SET NOCOUNT ON;
IF EXISTS (SELECT 0 FROM deleted)
BEGIN --UPDADE
SELECT @setDefault = ins.[Default] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].WebMenuList SET [Default] = 0 WHERE Id <> @RecId;
END
END ELSE
BEGIN -- INSERT
SELECT @setDefault = ins.[Default] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].WebMenuList SET [Default] = 0 WHERE Id <> @RecId;
END
END
END/* ELSE
BEGIN --DELETE
SELECT @setDefault = ins.[Default] from deleted ins;
SELECT @RecId = ins.Id from deleted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].WebMenuList SET [Default] = 1
WHERE Id IN(SELECT TOP (1) Id FROM [dbo].WebMenuList WHERE Id <> @RecId)
;
END
END*/
GO
TBL WebMessagesList
IF OBJECT_ID('[dbo].[WebMessagesList]') IS NOT NULL
DROP TABLE [dbo].[WebMessagesList]
GO
CREATE TABLE [dbo].[WebMessagesList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[Name] VARCHAR(50) NOT NULL,
[Description] TEXT NULL,
[UserId] INT NOT NULL,
[Active] BIT NOT NULL CONSTRAINT [DF_WebMessagesList_Active] DEFAULT ((1)),
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_WebMessagesList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_WebMessagesList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_WebMessagesList] UNIQUE NONCLUSTERED ([Name] asc) ,
CONSTRAINT [FK_WebMessagesList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) )
TBL WebSettingList
IF OBJECT_ID('[dbo].[WebSettingList]') IS NOT NULL
DROP TABLE [dbo].[WebSettingList]
GO
CREATE TABLE [dbo].[WebSettingList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[Key] NVARCHAR(50) NOT NULL,
[Value] TEXT NOT NULL,
[Description] TEXT NULL,
[UserId] INT NOT NULL,
[Timestamp] DATETIME2 NOT NULL CONSTRAINT [DF_WebSettingList_CreateDate] DEFAULT (getdate()),
CONSTRAINT [PK_WebSettingList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_WebSettingList] UNIQUE NONCLUSTERED ([Key] asc) ,
CONSTRAINT [FK_WebSettingList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) ON DELETE CASCADE )
TBL WebUserSettingList
IF OBJECT_ID('[dbo].[WebUserSettingList]') IS NOT NULL
DROP TABLE [dbo].[WebUserSettingList]
GO
CREATE TABLE [dbo].[WebUserSettingList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[Key] NVARCHAR(50) NOT NULL,
[Value] NVARCHAR(250) NOT NULL,
[UserId] INT NOT NULL,
[Timestamp] DATETIME2 NOT NULL CONSTRAINT [DF_WebUserSettingList_CreateDate] DEFAULT (getdate()),
CONSTRAINT [PK_WebUserSettingList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_WebUserSettingList] UNIQUE NONCLUSTERED ([UserId] asc, [Key] asc) ,
CONSTRAINT [FK_WebUserSettingList_UserList] FOREIGN KEY ([UserId]) REFERENCES [dbo].[SolutionUserList] (Id) ON DELETE CASCADE )
TBL WebVisitIpList
IF OBJECT_ID('[dbo].[WebVisitIpList]') IS NOT NULL
DROP TABLE [dbo].[WebVisitIpList]
GO
CREATE TABLE [dbo].[WebVisitIpList] (
[Id] INT IDENTITY(1,1) NOT NULL,
[WebHostIp] VARCHAR(50) NOT NULL,
[Description] TEXT NULL,
[WhoIsInformations] TEXT NULL,
[TimeStamp] DATETIME2 NOT NULL CONSTRAINT [DF_WebVisitIpList_TimeStamp] DEFAULT (getdate()),
CONSTRAINT [PK_WebVisitIpList] PRIMARY KEY CLUSTERED ([Id] asc) ,
CONSTRAINT [IX_WebVisitIpList] UNIQUE NONCLUSTERED ([WebHostIp] asc, [TimeStamp] asc) )
Úvod Start -DATABASE-RULE
Vše začíná U databáze. Pravidla určující MultiLogiku v 1 Balíčku. Zde najdete Kompletní Strukturu Aktuální Databáze a Seznam Pravidel, které je obecně dobré dodržovat
1 pravidlo: Každé slovo má Hluboký Význam
Vytvořené procedury pro automatizaci, Hromadné Operace, Správu DB
DB - Export Procedur Řešení,
Zde procedury pro automatizaci, Hromadné Operace, Správu DB
SP SpTaskDB_CLONE
-- Procedure For Clone Database To NEW DATABASE With Create New User If username+Pw is Inserted
-- IF Usename OR password are null the User Is Cerated With Same name AND password as DATABASE
CREATE procedure [dbo].[DB_CLONE](@SourceDbName varchar(255), @NewDbName varchar(255),@Rewrite bit = false, @userName varchar(255) = NULL, @password varchar(255) = NULL)
AS
BEGIN
SET NOCOUNT ON;
-- CREATE C:\Database Folder
BEGIN TRY EXEC xp_cmdshell 'MD C:\Database'; END TRY
BEGIN CATCH SELECT ERROR_NUMBER() AS ErrorNumber ,ERROR_MESSAGE() AS ErrorMessage; END CATCH;
--CHECK AND SET USERNAME AND PASSWORD
IF ( ISNULL(@userName,1) = 1 OR ISNULL(@password,1) = 1) BEGIN
SET @userName = @NewDbName;
SET @password = @NewDbName;
END
--DELETE DATABASE IF EXIST IN REWRITE MODE
IF (@Rewrite = 1 AND DB_ID(@NewDbName) IS NOT NULL) BEGIN
BEGIN TRY EXEC('DROP DATABASE ' + @NewDbName +';') END TRY BEGIN CATCH END CATCH;
END
--BACKUP SOURCE DATABASE
DECLARE @backupfile as varchar(1024) = CONCAT('C:\Database\','_',@SourceDbName,'.bak');
DECLARE @NewDBfileName as varchar(1024) = CONCAT('C:\Database\',@NewDbName,'.mdf');
DECLARE @NewDBLogfileName as varchar(1024) = CONCAT('C:\Database\',@NewDbName,'_log','.ldf');
DECLARE @OldDBLogName as varchar(1024) = CONCAT(@SourceDbName,'_log');
DECLARE @NewDBLogName as varchar(1024) = CONCAT(@NewDbName,'_log');
BEGIN TRY DBCC SHRINKFILE (2, 1) END TRY BEGIN CATCH END CATCH;
BACKUP DATABASE @SourceDbName TO DISK = @backupfile;
BEGIN TRY DBCC SHRINKFILE (2, 1) END TRY BEGIN CATCH END CATCH;
BACKUP DATABASE @SourceDbName TO DISK = @backupfile;
--CREATE NEW DFATABASE
RESTORE DATABASE @NewDbName FROM DISK = @backupfile
WITH MOVE @SourceDbName TO @NewDBfileName,
MOVE @OldDBLogName TO @NewDBLogfileName,
FILE = 2,RECOVERY, REPLACE, STATS = 10;
EXEC('ALTER DATABASE ' + @NewDbName + ' SET MULTI_USER');
--SET RIGHT LOGICAL FILE NAME
BEGIN TRY EXEC('USE ' + @NewDbName +'; ALTER DATABASE ' + @NewDbName + ' MODIFY FILE (NAME= ' + @SourceDbName +' , NEWNAME= ' +@NewDbName +') ') END TRY BEGIN CATCH END CATCH;
BEGIN TRY EXEC('USE ' + @NewDbName +'; ALTER DATABASE ' + @NewDbName + ' MODIFY FILE (NAME= ' + @OldDBLogName +' , NEWNAME= ' +@NewDBLogName +') ') END TRY BEGIN CATCH END CATCH;
-- REMOVE Username For REINSERTING
BEGIN TRY EXEC('USE ' + @NewDbName + '; DROP USER IF EXISTS '+ @userName) END TRY BEGIN CATCH END CATCH;
--CREATE NEW USER IF NOT EXIST
BEGIN TRY
EXEC('USE ' + @NewDbName + '; CREATE LOGIN ' + @username + ' WITH PASSWORD = ''' + @password + ''', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF')
--CREATE LOGIN @userName WITH PASSWORD = @password, DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF;
END TRY
BEGIN CATCH SELECT ERROR_NUMBER() AS ErrorNumber ,ERROR_MESSAGE() AS ErrorMessage; END CATCH;
--SET RIGHTS FOR USER
BEGIN TRY EXEC('USE ' + @NewDbName + '; CREATE USER ' + @userName +' FOR LOGIN ' + @userName) END TRY BEGIN CATCH END CATCH;
BEGIN TRY EXEC('USE ' + @NewDbName + '; ALTER ROLE [db_datareader] ADD MEMBER ' + @userName) END TRY BEGIN CATCH END CATCH;
BEGIN TRY EXEC('USE ' + @NewDbName + '; ALTER ROLE [db_datawriter] ADD MEMBER ' + @userName) END TRY BEGIN CATCH END CATCH;
BEGIN TRY EXEC('USE ' + @NewDbName + '; GRANT EXECUTE TO ' + @userName) END TRY BEGIN CATCH END CATCH;
END;
SP SpOperationExportConfigFile
CREATE PROCEDURE [dbo].[SpOperationExportConfigFile]--(@Json varchar(MAX) OUTPUT)
AS
BEGIN
DECLARE @Json VARCHAR (4000);
SET @Json = (SELECT [Key],[Value] FROM ServerSettingList FOR JSON PATH);
/*
SET @Json = '{"DatabaseConnectionString":""';
SELECT
@Json += CASE
WHEN [Type] = 'bit' AND LOWER(ss.[Value]) = 'false' THEN CONCAT(',"', ss.[Key],'":False' )
WHEN [Type] = 'bit' AND LOWER(ss.[Value]) = 'true' THEN CONCAT(',"', ss.[Key],'":True')
WHEN [Type] = 'int' THEN CONCAT(',"', ss.[Key],'":', ss.[Value])
ELSE CONCAT(',"', ss.[Key],'":"', ss.[Value],'"')
END
FROM ServerSettingList AS ss;
*/
--SET @Json += '''';
SELECT [Value] FROM OpenJson(@Json);
END
SP SpAutoCleanEmailer
CREATE PROCEDURE [dbo].[SpAutoCleanEmailer]
AS
BEGIN
DECLARE @AutoCleanEmailer int;
SET NOCOUNT ON;
--GET AutoCleanEmailer Configuration
SELECT @AutoCleanEmailer = CAST(CAST(SUBSTRING(p.[Value],1,10) as varchar(10)) as int) FROM [dbo].[SystemParameterList] p WHERE p.[UserId] IS NULL AND p.[SystemName] = 'EmailerAutoCleanDayInterval';
IF(@AutoCleanEmailer > 0) BEGIN
DELETE FROM [dbo].[SolutionEmailerHistoryList] WHERE [TimeStamp] < DATEADD(DAY, -@AutoCleanEmailer, CAST(CURRENT_TIMESTAMP AS DATETIME));
END
END
SP _SpOperationTodoCheckRolesIntegrity
-- PROCEDURE CREATE Check Roles Integrity In Access Definitions
-- Can Be Damaged By Remove Role
CREATE procedure [dbo].[_SpOperationTodoCheckRolesIntegrity]
AS
BEGIN
DECLARE @Error VarChar(MAX);
--DO PROCESS
BEGIN TRY
SELECT 1;
-- PROCESS COMPLETED
SELECT 'Process Completed' as 'MessageList';
END TRY
BEGIN CATCH
SELECT @Error = CONCAT('ProcessIdentifier',' ,ErrNo:',CAST(ERROR_NUMBER() AS VARCHAR),' ,Message:',ERROR_MESSAGE());
INSERT INTO [dbo].[SolutionFailList] ([Source],[Message]) VALUES('Database', @Error);
-- PROCESS ERROR
SELECT @Error as 'MessageList';
END CATCH
END;
SP SpImportTemplateDocFilesFromFolder
CREATE PROCEDURE [dbo].[SpImportTemplateDocFilesFromFolder] (
@FolderPath NVARCHAR (2048)
)
AS
BEGIN
DECLARE @tsql NVARCHAR (4000);DECLARE @Filename varchar(250);DECLARE @GroupId int;DECLARE @Sequence int;DECLARE @Description varchar(250);
DECLARE @FilePathList TABLE (RowNum int IDENTITY (1, 1) Primary key NOT NULL,SubDirectory nvarchar(255), Depth smallint, FileFlag bit);
DECLARE @RowCnt int; SET @RowCnt = 0;
SET NOCOUNT ON
SET @GroupId = 9;
SET @Sequence = 1000;
SET @Description = 'IMPORTED FILE';
--CLEAN RECORDS WITH SAME DESCRIPTION
--DELETE FROM [dbo].[DocSrvDocTemplateList] WHERE CONVERT(varchar(MAX),[Description]) IN ('IMPORTED FILE');
INSERT INTO @FilePathList (SubDirectory, Depth, FileFlag) EXEC xp_dirtree @FolderPath, 0, 1;
WHILE @RowCnt <= (SELECT COUNT([RowNum]) FROM @FilePathList)
BEGIN
SET @RowCnt = @RowCnt + 1;
SELECT @Filename = SubDirectory FROM @FilePathList WHERE [RowNum] = @RowCnt;
SET @tsql = 'INSERT INTO DocSrvDocTemplateList ([GroupId],[Sequence],[Name],[Description],[UserId],[Template]) ' +
' SELECT 9,1000,' + '''' + @Filename + '''' + ',' + '''' + @Description + '''' + ',1, * ' +
'FROM Openrowset( Bulk ' + '''' + CONCAT(@FolderPath,'\',@Filename) + '''' + ', Single_Blob) as img';
EXEC (@tsql);
--PRINT (@tsql);
END
/* EXAMPLE FOR IMPORT ONLY ONE FILE
SET @tsql = 'INSERT INTO DocSrvDocTemplateList ([GroupId],[Sequence],[Name],[Description],[UserId], [Template]) ' +
' SELECT ' + '''' + @GroupId + '''' + ','+ '''' + @Sequence + '''' + ',' + '''' + @Filename + '''' + ',' + '''' + @Description + '''' + ',1, * ' +
'FROM Openrowset( Bulk ' + '''' + @TemplateFullPath + '''' + ', Single_Blob) as img'
EXEC (@tsql)
*/
SET NOCOUNT OFF
END
SP SpTaskDB_BACKUP
CREATE procedure [dbo].[SpTaskDB_BACKUP]
AS
BEGIN
DECLARE @dbName as varchar(255) = DB_NAME();
DECLARE @fileName as varchar(1024) = CONCAT('C:\Database\',@dbName,'_',FORMAT(GETDATE(),'yyyyMMdd_hhmmss'),'.bak');
BEGIN TRY DROP USER [easyitcenter] END TRY BEGIN CATCH END CATCH;
--DBCC SHRINKFILE (2, 1);
BACKUP DATABASE @dbName TO DISK = @fileName;
--DBCC SHRINKFILE (2, 1);
BACKUP DATABASE @dbName TO DISK = @fileName;
BEGIN TRY CREATE USER [easyitcenter] FOR LOGIN [easyitcenter] END TRY BEGIN CATCH END CATCH;
BEGIN TRY ALTER ROLE [db_datareader] ADD MEMBER [easyitcenter]; END TRY BEGIN CATCH END CATCH;
BEGIN TRY ALTER ROLE [db_datawriter] ADD MEMBER [easyitcenter]; END TRY BEGIN CATCH END CATCH;
BEGIN TRY GRANT EXECUTE TO [easyitcenter]; END TRY BEGIN CATCH END CATCH;
--PATH ON LINUX: '/var/backups/DBbackup/hotels.bak'
SELECT CONCAT('Database Was Backuped to ','C:\Database\',@dbName,'_',FORMAT(GETDATE(),'yyyyMMdd_hhmmss'),'.bak') as 'MessageList';
END;
SP SpTaskDB_SETRIGHTS
CREATE procedure [dbo].[SpTaskDB_SETRIGHTS]
AS
BEGIN
BEGIN TRY CREATE USER [easyitcenter] FOR LOGIN [easyitcenter] END TRY BEGIN CATCH END CATCH;
BEGIN TRY ALTER ROLE [db_datareader] ADD MEMBER [easyitcenter]; END TRY BEGIN CATCH END CATCH;
BEGIN TRY ALTER ROLE [db_datawriter] ADD MEMBER [easyitcenter]; END TRY BEGIN CATCH END CATCH;
BEGIN TRY GRANT EXECUTE TO [easyitcenter]; END TRY BEGIN CATCH END CATCH;
END;
SELECT CONCAT('Read/Write/Exec Rights On Database EasyITCenter was set','') as 'MessageList';
SP SpProvider_ExportSqlScript
-- Its Procedure From Provider To Customer
-- @TargetLinkedDb must be In Format: 95.183.52.33 or 95.183.52.33,1433 or SNRJDI\SLAMANAGEMENT
CREATE procedure [dbo].[SpProvider_ExportSqlScript](@TableName varchar(255)
)
AS
BEGIN
DECLARE @SqlScript as VARCHAR(MAX) ='';
DECLARE @TableDefinitionList TABLE (RowNum int IDENTITY (1, 1) Primary key NOT NULL, [Template] text NULL);
INSERT INTO @TableDefinitionList([Template]) EXEC sp_GetDDL @TableName;
SELECT @SqlScript = [Template] FROM @TableDefinitionList WHERE RowNum = 1;
SET @SqlScript = REPLACE(@SqlScript,'','''');
SET @SqlScript = REPLACE(@SqlScript,' GO','');
END;
SELECT @SqlScript as 'MessageList';
SP SpOperationFailListClean
CREATE procedure [dbo].[SpOperationFailListClean]
AS
BEGIN
TRUNCATE TABLE [dbo].[SolutionFailList];
SELECT 'Solution Fails was Cleaned' as 'MessageList';
END;
SP SystemSpGetSystemPageList
CREATE procedure [dbo].[SystemSpGetSystemPageList]
AS
BEGIN
--GET ALL TABLES
SELECT CONCAT(TABLE_NAME, 'Page') as 'TableList'
FROM INFORMATION_SCHEMA.TABLES
WHERE table_type = 'BASE TABLE' AND TABLE_NAME NOT LIKE '%SupportList%'
UNION
--GET ALL VIEWS
SELECT
CONCAT(TABLE_NAME, 'Page') as 'TableList'
FROM INFORMATION_SCHEMA.VIEWS
WHERE TABLE_NAME NOT LIKE '%SupportList%'
UNION
--GET ALL Custom Form Page Names
SELECT [PageName] AS TABLE_NAME
FROM [dbo].[SystemCustomPageList]
WHERE Active = 1
END;
SP sp_GetDDL
--#################################################################################################
-- Real World DBA Toolkit Version 2019-08-01 Lowell Izaguirre lowell@stormrage.com
--#################################################################################################
-- USAGE: exec sp_GetDDL GMACT
-- or exec sp_GetDDL 'bob.example'
-- or exec sp_GetDDL '[schemaname].[tablename]'
-- or exec sp_GetDDL #temp
--#################################################################################################
-- copyright 2004-2018 by Lowell Izaguirre scripts*at*stormrage.com all rights reserved.
--developer utility function added by Lowell, used in SQL Server Management Studio
-- http://www.stormrage.com/SQLStuff/sp_GetDDL_Latest.txt
--Purpose: Script Any Table, Temp Table or Object(Procedure Function Synonym View Table Trigger)
--#################################################################################################
-- see the thread here for lots of details: http://www.sqlservercentral.com/Forums/Topic751783-566-7.aspx
-- You can use this however you like...this script is not rocket science, but it took a bit of work to create.
-- the only thing that I ask
-- is that if you adapt my procedure or make it better, to simply send me a copy of it,
-- so I can learn from the things you've enhanced.The feedback you give will be what makes
-- it worthwhile to me, and will be fed back to the SQL community.
-- add this to your toolbox of helpful scripts.
--#################################################################################################
--
-- V300 uses String concatination and sys.tables instead of a cursor
-- V301 enhanced 07/31/2009 to include extended properties definitions
-- V302 fixes an issue where the schema is created , ie 'bob', but no user named 'bob' owns the schema, so the table is not found
-- V303 fixes an issue where all rules are appearing, instead of jsut the rule related to a column
-- V304 testing whether vbCrLf is better than just CHAR(13), some formatting cleanup with GO statements
-- also fixed an issue with the conversion from syscolumns to sys.columns, max-length is only field we need, not [precision]
-- V305 user feedback helped me find that the type_name function should call user_type_id instead of system_type_id
-- also fixed issue where identity definition missing from numeric/decimal definition
-- V306 fixes the computed columns definition that got broken/removed somehow in V300
-- also formatting when decimal is not an identity
-- V307 fixes bug identified by David Griffiths-491597 from SSC where the @TABLE_ID
-- is reselected, but without it's schema , potentially selecting the wrong table
-- also fixed is the missing size definition for varbinary, also found by David Griffith
-- V308 abtracted all SQLs to use Table Alaises
-- added logic to script a temp table.
-- added warning about possibly not being marked as system object.
-- V309 added logic based on feedback from Vincent Wylenzek @SSC to return the definition from sys.sql_modules for
-- any object like procedure/view/function/trigger, and not just a table.
-- note previously, if you pointed sp_GetDDL at a view, it returned the view definition as a table...
-- now it will return the view definition instead.
-- V309a returns multi row recordset, one line per record
-- V310a fixed the commented out code related to collation identified by moadh.bs @SSC
-- changed the DEFAULT definitions to not include the default name.
-- V310b Added PERSISTED to calculated columns where applicable
-- V310b fixed COLLATE statement for temp tables
-- V310c fixed NVARCHAR size misreported as doubled.
-- V311 fixed issue where indexes did not identify if the column was ASC or DESC found by nikus @ SSC
-- V311a fixed issue where indexes did not identify if the index was CLUSTERED or NONCLUSTERED found by nikus @ SSC 02/22/2013
-- V312 got rid of all upper casing, and allowing all scripts to generate the exact object names in cases of case sensitive databases.
-- now using the case sensitive name of the table passed: so of you did 'exec sp_GetDDL invoicedocs , it might return the script for InvoiceDocs, as that is how it is spelled in sys.objects.
-- added if exists(drop table/procedure/function) statement to the scripting automatically.
-- toggled the commented out code to list any default constraints by name, hopefully to be more accurate..
-- formatting of index statements to be multi line for better readability
--V314 03/30/2015
-- did i mention this scripts out temp tables too? sp_GetDDL #tmp
-- scripts any object:table,#temptable procedure, function, view or trigger
-- added ability to script synonyms
-- moved logic for REAL datatype to fix error when scripting real columns
-- added OmaCoders suggestion to script column extended properties as well.
-- added matt_slack suggestion to script schemaname as part of index portion of script.
-- minor script cleanup to use QUOTENAME insead of concatenating square brackets.
-- changed compatibility to 2008 and above only, now filtered idnexes with WHERE statmeents script correctly
-- foreign key tables and columns in script now quotenamed to account for spaces in names; previously an error for Applciation ID instead of [Application ID]
--V315 Fixes Aliases and column names that prevented Case Sensitive collations from working.
-- Adds code if the procedure scripted is a system object
-- index scripts featuring filtered indexes is now included
-- index scripts now include filegroup name and compression settings
-- foreign key casecade delete/update settings now included as identified by Alberto aserio@SSC)
-- Fixes related to scripting extended events as identified by Alberto aserio@SSC)
--V316 Fixes Identified 07/27/2016 by mlm( m.martinelli@SSC)
-- Added logic resolving error when custom data type are defined using name greather than 16 char.
-- Added handling for data types: binary, datetime2, datetimeoffset, time
-- Added Set Based logic for Handling Fixed FOREIGN KEYS handling when one foreign key is define on more then one field
-- Added SPARSE column property
--V317 Fixes Identified 03/30/2017 by Lowell
-- Scripting of Foreign key column(s) are now quotenamed
-- Scripting column store indexes was broken, now fixed for column store indexes
--V318 Fixes Identified 02/14/2018 by Lowell
-- Scripting of with collation added/required for scripting SharePoint/ReportServer , or databases with non standard collations
-- Scripting enhanced to definitively handle case sensitive collations as well.
--V319 Adding logic for Temporal Tables, to grab their auto nistory tables
-- first attempt for partitioned tables, to get the columns correctly on the partition scheme
-- DROP PROCEDURE [dbo].[sp_GetDDL]
--#############################################################################
--if you are going to put this in MASTER, and want it to be able to query
--each database's sys.indexes, you MUST mark it as a system procedure:
--EXECUTE sp_ms_marksystemobject 'sp_GetDDL'
--#############################################################################
CREATE PROCEDURE [dbo].[sp_GetDDL]
@TBL VARCHAR(255)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @TBLNAME VARCHAR(200),
@SCHEMANAME VARCHAR(255),
@STRINGLEN INT,
@TABLE_ID INT,
@FINALSQL VARCHAR(MAX),
@CONSTRAINTSQLS VARCHAR(MAX),
@CHECKCONSTSQLS VARCHAR(MAX),
@RULESCONSTSQLS VARCHAR(MAX),
@FKSQLS VARCHAR(MAX),
@TRIGGERSTATEMENT VARCHAR(MAX),
@EXTENDEDPROPERTIES VARCHAR(MAX),
@INDEXSQLS VARCHAR(MAX),
@MARKSYSTEMOBJECT VARCHAR(MAX),
@vbCrLf CHAR(2),
@ISSYSTEMOBJECT INT,
@PROCNAME VARCHAR(256),
@input VARCHAR(MAX),
@ObjectTypeFound VARCHAR(255),
@ObjectDataTypeLen INT,
--V3.20 additions
@WithStatement VARCHAR(MAX),
@FileGroupStatement VARCHAR(MAX),
@PartitioningStatement VARCHAR(MAX),
@TemporalStatement VARCHAR(MAX);
--##############################################################################
-- INITIALIZE
--##############################################################################
SET @input = '';
--new code: determine whether this proc is marked as a system proc with sp_ms_marksystemobject,
--which flips the is_ms_shipped bit in sys.objects
SELECT @ISSYSTEMOBJECT = ISNULL([is_ms_shipped],0),@PROCNAME = ISNULL([name],'sp_GetDDL') FROM [sys].[objects] WHERE [object_id] = @@PROCID;
IF @ISSYSTEMOBJECT IS NULL
SELECT @ISSYSTEMOBJECT = ISNULL([is_ms_shipped],0),@PROCNAME = ISNULL([name],'sp_GetDDL') FROM [master].[sys].[objects] WHERE [object_id] = @@PROCID;
IF @ISSYSTEMOBJECT IS NULL
SET @ISSYSTEMOBJECT = 0;
IF @PROCNAME IS NULL
SET @PROCNAME = 'sp_GetDDL';
--SET @TBL = '[DBO].[WHATEVER1]'
--does the tablename contain a schema?
SET @vbCrLf = CHAR(10);
SELECT @SCHEMANAME = ISNULL(PARSENAME(@TBL,2),'dbo') ,
@TBLNAME = PARSENAME(@TBL,1);
SELECT
@TBLNAME = [objz].[name],
@TABLE_ID = [objz].[object_id]
FROM [sys].[objects] AS [objz]
WHERE [objz].[type] IN ('S','U')
AND [objz].[name] <> 'dtproperties'
AND [objz].[name] = @TBLNAME
AND [objz].[schema_id] = SCHEMA_ID(@SCHEMANAME) ;
SELECT @ObjectDataTypeLen = MAX(LEN([name])) FROM [sys].[types];
--##############################################################################
-- Check If TEMP TableName is Valid
--##############################################################################
IF LEFT(@TBLNAME,1) = '#' COLLATE SQL_Latin1_General_CP1_CI_AS
BEGIN
PRINT '--TEMP TABLE ' + QUOTENAME(@TBLNAME) + ' FOUND';
IF OBJECT_ID('tempdb..' + QUOTENAME(@TBLNAME)) IS NOT NULL
BEGIN
PRINT '--GOIN TO TEMP PROCESSING';
GOTO TEMPPROCESS;
END;
END;
ELSE
BEGIN
PRINT '--Non-Temp Table, ' + QUOTENAME(@TBLNAME) + ' continue Processing';
END;
--##############################################################################
-- Check If TableName is Valid
--##############################################################################
IF ISNULL(@TABLE_ID,0) = 0
BEGIN
--V309 code: see if it is an object and not a table.
SELECT
@TBLNAME = [objz].[name],
@TABLE_ID = [objz].[object_id],
@ObjectTypeFound = [objz].[type_desc]
FROM [sys].[objects] AS [objz]
--WHERE [type_desc] IN('SQL_STORED_PROCEDURE','VIEW','SQL_TRIGGER','AGGREGATE_FUNCTION','SQL_INLINE_TABLE_VALUED_FUNCTION','SQL_TABLE_VALUED_FUNCTION','SQL_SCALAR_FUNCTION','SYNONYMN')
WHERE [objz].[type] IN ('P','V','TR','AF','IF','FN','TF','SN')
AND [objz].[name] <> 'dtproperties'
AND [objz].[name] = @TBLNAME
AND [objz].[schema_id] = SCHEMA_ID(@SCHEMANAME) ;
IF ISNULL(@TABLE_ID,0) <> 0
BEGIN
--adding a drop statement.
--adding a sp_ms_marksystemobject if needed
SELECT @MARKSYSTEMOBJECT = CASE
WHEN [objz].[is_ms_shipped] = 1
THEN '
GO
--#################################################################################################
--Mark as a system object
EXECUTE sp_ms_marksystemobject ''' + QUOTENAME(@SCHEMANAME) +'.' + QUOTENAME(@TBLNAME) + '''
--#################################################################################################
'
ELSE '
GO
'
END
FROM [sys].[objects] AS [objz]
WHERE [objz].[object_id] = @TABLE_ID;
--adding a drop statement.
IF @ObjectTypeFound = 'SYNONYM' COLLATE SQL_Latin1_General_CP1_CI_AS
BEGIN
SELECT @FINALSQL =
'IF EXISTS(SELECT * FROM sys.synonyms WHERE name = '''
+ [name]
+ ''''
+ ' AND base_object_name <> ''' + [base_object_name] + ''')'
+ @vbCrLf
+ ' DROP SYNONYM ' + QUOTENAME([name]) + ''
+ @vbCrLf
+'GO'
+ @vbCrLf
+'IF NOT EXISTS(SELECT * FROM sys.synonyms WHERE name = '''
+ [name]
+ ''')'
+ @vbCrLf
+ 'CREATE SYNONYM ' + QUOTENAME([name]) + ' FOR ' + [base_object_name] +';'
FROM [sys].[synonyms]
WHERE [name] = @TBLNAME
AND [schema_id] = SCHEMA_ID(@SCHEMANAME);
END;
ELSE
BEGIN
SELECT @FINALSQL =
'IF OBJECT_ID(''' + QUOTENAME(@SCHEMANAME) + '.' + QUOTENAME(@TBLNAME) + ''') IS NOT NULL ' + @vbCrLf
+ 'DROP ' + CASE
WHEN [objz].[type] IN ('P')
THEN ' PROCEDURE '
WHEN [objz].[type] IN ('V')
THEN ' VIEW '
WHEN [objz].[type] IN ('TR')
THEN ' TRIGGER '
ELSE ' FUNCTION '
END
+ QUOTENAME(@SCHEMANAME) + '.' + QUOTENAME(@TBLNAME) + ' ' + @vbCrLf + 'GO' + @vbCrLf
+ [def].[definition] + @MARKSYSTEMOBJECT
FROM [sys].[objects] AS [objz]
INNER JOIN [sys].[sql_modules] AS [def]
ON [objz].[object_id] = [def].[object_id]
WHERE [objz].[type] IN ('P','V','TR','AF','IF','FN','TF')
AND [objz].[name] <> 'dtproperties'
AND [objz].[name] = @TBLNAME
AND [objz].[schema_id] = SCHEMA_ID(@SCHEMANAME) ;
END;
SET @input = @FINALSQL;
SELECT @input AS [Item];
RETURN;
END;
ELSE
BEGIN
SET @FINALSQL = 'Object ' + QUOTENAME(@SCHEMANAME) + '.' + QUOTENAME(@TBLNAME) + ' does not exist in Database ' + QUOTENAME(DB_NAME()) + ' '
+ CASE
WHEN @ISSYSTEMOBJECT = 0 THEN @vbCrLf + ' (also note that ' + @PROCNAME + ' is not marked as a system proc and cross db access to sys.tables will fail.)'
ELSE ''
END;
IF LEFT(@TBLNAME,1) = '#'
SET @FINALSQL = @FINALSQL + ' OR in The tempdb database.';
SELECT @FINALSQL AS [Item];
RETURN 0;
END;
END;
--##############################################################################
-- Valid Table, Continue Processing
--##############################################################################
--Is this a SYSTEM versioned TABLE?
SELECT @FINALSQL =
CASE
WHEN [tabz].[history_table_id] IS NULL
THEN ''
ELSE 'ALTER TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME([tabz].[object_id]) ) + '.' + QUOTENAME(OBJECT_NAME([tabz].[object_id])) + ' SET (SYSTEM_VERSIONING = OFF);' + @vbCrLf
+ 'IF OBJECT_ID(''' + QUOTENAME(OBJECT_SCHEMA_NAME([tabz].[history_table_id]) ) + '.' + QUOTENAME(OBJECT_NAME([tabz].[history_table_id])) + ''') IS NOT NULL ' + @vbCrLf
+ 'DROP TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME([tabz].[history_table_id])) + '.' + QUOTENAME(OBJECT_NAME([tabz].[history_table_id])) + ' ' + @vbCrLf + 'GO' + @vbCrLf
END
+ 'IF OBJECT_ID(''' + QUOTENAME(OBJECT_SCHEMA_NAME([tabz].[object_id]) ) + '.' + QUOTENAME(OBJECT_NAME([tabz].[object_id])) + ''') IS NOT NULL ' + @vbCrLf
+ 'DROP TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME([tabz].[object_id])) + '.' + QUOTENAME(OBJECT_NAME([tabz].[object_id])) + ' ' + @vbCrLf + 'GO' + @vbCrLf
+ 'CREATE TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME([tabz].[object_id])) + '.' + QUOTENAME(OBJECT_NAME([tabz].[object_id])) + ' ( '
FROM [sys].[tables] [tabz] WHERE [tabz].[object_id] = @TABLE_ID
PRINT @FINALSQL
--removed invalid code here which potentially selected wrong table--thanks David Grifiths @SSC!
SELECT
@STRINGLEN = MAX(LEN([colz].[name])) + 1
FROM [sys].[objects] AS [objz]
INNER JOIN [sys].[columns] AS [colz]
ON [objz].[object_id] = [colz].[object_id]
AND [objz].[object_id] = @TABLE_ID;
--##############################################################################
--Get the columns, their definitions and defaults.
--##############################################################################
SELECT
@FINALSQL = @FINALSQL
+ CASE
WHEN [colz].[is_computed] = 1
THEN @vbCrLf
+ QUOTENAME([colz].[name])
+ ' '
+ SPACE(@STRINGLEN - LEN([colz].[name]))
+ 'AS ' + ISNULL([CALC].[definition],'')
+ CASE
WHEN [CALC].[is_persisted] = 1
THEN ' PERSISTED'
ELSE ''
END
ELSE @vbCrLf
+ QUOTENAME([colz].[name])
+ ' '
+ SPACE(@STRINGLEN - LEN([colz].[name]))
+ UPPER(TYPE_NAME([colz].[user_type_id]))
+ CASE
-- data types with precision and scale IE DECIMAL(18,3), NUMERIC(10,2)
WHEN TYPE_NAME([colz].[user_type_id]) IN ('decimal','numeric')
THEN '('
+ CONVERT(VARCHAR,[colz].[precision])
+ ','
+ CONVERT(VARCHAR,[colz].[scale])
+ ') '
+ SPACE(6 - LEN(CONVERT(VARCHAR,[colz].[precision])
+ ','
+ CONVERT(VARCHAR,[colz].[scale])))
+ SPACE(7)
+ SPACE(@ObjectDataTypeLen - LEN(TYPE_NAME([colz].[user_type_id])))
+ CASE
WHEN COLUMNPROPERTY ( @TABLE_ID , [colz].[name] , 'IsIdentity' ) = 0
THEN ''
ELSE ' IDENTITY('
+ CONVERT(VARCHAR,ISNULL(IDENT_SEED(@TBLNAME),1) )
+ ','
+ CONVERT(VARCHAR,ISNULL(IDENT_INCR(@TBLNAME),1) )
+ ')'
END
+ CASE WHEN [colz].[is_sparse] = 1 THEN ' sparse' ELSE ' ' END
+ CASE
WHEN [colz].[is_nullable] = 0
THEN ' NOT NULL'
ELSE ' NULL'
END
-- data types with scale IE datetime2(7),TIME(7)
WHEN TYPE_NAME([colz].[user_type_id]) IN ('datetime2','datetimeoffset','time')
THEN CASE
WHEN [colz].[scale] < 7 THEN
'('
+ CONVERT(VARCHAR,[colz].[scale])
+ ') '
ELSE
' '
END
+ SPACE(4)
+ SPACE(@ObjectDataTypeLen - LEN(TYPE_NAME([colz].[user_type_id])))
+ ' '
+ CASE WHEN [colz].[is_sparse] = 1 THEN ' sparse' ELSE ' ' END
+ CASE [colz].[generated_always_type]
WHEN 0 THEN ''
WHEN 1 THEN ' GENERATED ALWAYS AS ROW START'
WHEN 2 THEN ' GENERATED ALWAYS AS ROW END'
ELSE ''
END
+ CASE WHEN [colz].[is_hidden] = 1 THEN ' HIDDEN' ELSE '' END
+ CASE
WHEN [colz].[is_nullable] = 0
THEN ' NOT NULL'
ELSE ' NULL'
END
--data types with no/precision/scale,IE FLOAT
WHEN TYPE_NAME([colz].[user_type_id]) IN ('float') --,'real')
THEN
--addition: if 53, no need to specifically say (53), otherwise display it
CASE
WHEN [colz].[precision] = 53
THEN SPACE(11 - LEN(CONVERT(VARCHAR,[colz].[precision])))
+ SPACE(7)
+ SPACE(@ObjectDataTypeLen - LEN(TYPE_NAME([colz].[user_type_id])))
+ CASE WHEN [colz].[is_sparse] = 1 THEN ' sparse' ELSE ' ' END
+ CASE
WHEN [colz].[is_nullable] = 0
THEN ' NOT NULL'
ELSE ' NULL'
END
ELSE '('
+ CONVERT(VARCHAR,[colz].[precision])
+ ') '
+ SPACE(6 - LEN(CONVERT(VARCHAR,[colz].[precision])))
+ SPACE(7) + SPACE(@ObjectDataTypeLen - LEN(TYPE_NAME([colz].[user_type_id])))
+ CASE WHEN [colz].[is_sparse] = 1 THEN ' sparse' ELSE ' ' END
+ CASE
WHEN [colz].[is_nullable] = 0
THEN ' NOT NULL'
ELSE ' NULL'
END
END
--data type with max_length ie CHAR (44), VARCHAR(40), BINARY(5000),
--##############################################################################
-- COLLATE STATEMENTS
-- personally i do not like collation statements,
-- but included here to make it easy on those who do
--##############################################################################
WHEN TYPE_NAME([colz].[user_type_id]) IN ('char','varchar','binary','varbinary')
THEN CASE
WHEN [colz].[max_length] = -1
THEN '(max)'
+ SPACE(6 - LEN(CONVERT(VARCHAR,[colz].[max_length])))
+ SPACE(7) + SPACE(@ObjectDataTypeLen - LEN(TYPE_NAME([colz].[user_type_id])))
----collate to comment out when not desired
--+ CASE
-- WHEN COLS.collation_name IS NULL
-- THEN ''
-- ELSE ' COLLATE ' + COLS.collation_name
-- END
+ CASE WHEN [colz].[is_sparse] = 1 THEN ' sparse' ELSE ' ' END
+ CASE
WHEN [colz].[is_nullable] = 0
THEN ' NOT NULL'
ELSE ' NULL'
END
ELSE '('
+ CONVERT(VARCHAR,[colz].[max_length])
+ ') '
+ SPACE(6 - LEN(CONVERT(VARCHAR,[colz].[max_length])))
+ SPACE(7) + SPACE(@ObjectDataTypeLen - LEN(TYPE_NAME([colz].[user_type_id])))
----collate to comment out when not desired
--+ CASE
-- WHEN COLS.collation_name IS NULL
-- THEN ''
-- ELSE ' COLLATE ' + COLS.collation_name
-- END
+ CASE WHEN [colz].[is_sparse] = 1 THEN ' sparse' ELSE ' ' END
+ CASE
WHEN [colz].[is_nullable] = 0
THEN ' NOT NULL'
ELSE ' NULL'
END
END
--data type with max_length ( BUT DOUBLED) ie NCHAR(33), NVARCHAR(40)
WHEN TYPE_NAME([colz].[user_type_id]) IN ('nchar','nvarchar')
THEN CASE
WHEN [colz].[max_length] = -1
THEN '(max)'
+ SPACE(5 - LEN(CONVERT(VARCHAR,([colz].[max_length] / 2))))
+ SPACE(7)
+ SPACE(@ObjectDataTypeLen - LEN(TYPE_NAME([colz].[user_type_id])))
----collate to comment out when not desired
--+ CASE
-- WHEN COLS.collation_name IS NULL
-- THEN ''
-- ELSE ' COLLATE ' + COLS.collation_name
-- END
+ CASE WHEN [colz].[is_sparse] = 1 THEN ' sparse' ELSE ' ' END
+ CASE
WHEN [colz].[is_nullable] = 0
THEN ' NOT NULL'
ELSE ' NULL'
END
ELSE '('
+ CONVERT(VARCHAR,([colz].[max_length] / 2))
+ ') '
+ SPACE(6 - LEN(CONVERT(VARCHAR,([colz].[max_length] / 2))))
+ SPACE(7)
+ SPACE(@ObjectDataTypeLen - LEN(TYPE_NAME([colz].[user_type_id])))
----collate to comment out when not desired
--+ CASE
-- WHEN COLS.collation_name IS NULL
-- THEN ''
-- ELSE ' COLLATE ' + COLS.collation_name
-- END
+ CASE WHEN [colz].[is_sparse] = 1 THEN ' sparse' ELSE ' ' END
+ CASE
WHEN [colz].[is_nullable] = 0
THEN ' NOT NULL'
ELSE ' NULL'
END
END
WHEN TYPE_NAME([colz].[user_type_id]) IN ('datetime','money','text','image','real')
THEN SPACE(18 - LEN(TYPE_NAME([colz].[user_type_id])))
+ ' '
+ CASE WHEN [colz].[is_sparse] = 1 THEN ' sparse' ELSE ' ' END
+ CASE
WHEN [colz].[is_nullable] = 0
THEN ' NOT NULL'
ELSE ' NULL'
END
-- other data type IE INT, DATETIME, MONEY, CUSTOM DATA TYPE,...
ELSE SPACE(@ObjectDataTypeLen - LEN(TYPE_NAME([colz].[user_type_id])))
+ CASE
WHEN COLUMNPROPERTY ( @TABLE_ID , [colz].[name] , 'IsIdentity' ) = 0
THEN ' '
ELSE ' IDENTITY('
+ CONVERT(VARCHAR,ISNULL(IDENT_SEED(@TBLNAME),1) )
+ ','
+ CONVERT(VARCHAR,ISNULL(IDENT_INCR(@TBLNAME),1) )
+ ')'
END
+ SPACE(2)
+ CASE WHEN [colz].[is_sparse] = 1 THEN ' sparse' ELSE ' ' END
+ CASE
WHEN [colz].[is_nullable] = 0
THEN ' NOT NULL'
ELSE ' NULL'
END
END
+ CASE
WHEN [colz].[default_object_id] = 0
THEN ''
--ELSE ' DEFAULT ' + ISNULL(def.[definition] ,'')
--optional section in case NAMED default constraints are needed:
ELSE ' CONSTRAINT ' + QUOTENAME([DEF].[name]) + ' DEFAULT ' + ISNULL([DEF].[definition] ,'')
--i thought it needed to be handled differently! NOT!
END --CASE cdefault
END --iscomputed
+ ','
FROM [sys].[columns] AS [colz]
LEFT OUTER JOIN [sys].[default_constraints] AS [DEF]
ON [colz].[default_object_id] = [DEF].[object_id]
LEFT OUTER JOIN [sys].[computed_columns] AS [CALC]
ON [colz].[object_id] = [CALC].[object_id]
AND [colz].[column_id] = [CALC].[column_id]
WHERE [colz].[object_id]=@TABLE_ID
ORDER BY [colz].[column_id];
--##############################################################################
--used for formatting the rest of the constraints:
--##############################################################################
SELECT
@STRINGLEN = MAX(LEN([objz].[name])) + 1
FROM [sys].[objects] AS [objz];
--##############################################################################
--PK/Unique Constraints and Indexes, using the 2005/08 INCLUDE syntax
--##############################################################################
DECLARE @Results TABLE (
[SCHEMA_ID] INT,
[SCHEMA_NAME] VARCHAR(255),
[OBJECT_ID] INT,
[OBJECT_NAME] VARCHAR(255),
[index_id] INT,
[index_name] VARCHAR(255),
[ROWS] BIGINT,
[SizeMB] DECIMAL(19,3),
[IndexDepth] INT,
[TYPE] INT,
[type_desc] VARCHAR(30),
[fill_factor] INT,
[is_unique] INT,
[is_primary_key] INT ,
[is_unique_constraint] INT,
[index_columns_key] VARCHAR(MAX),
[index_columns_include] VARCHAR(MAX),
[has_filter] BIT ,
[filter_definition] VARCHAR(MAX),
[currentFilegroupName] VARCHAR(128),
[CurrentCompression] VARCHAR(128));
INSERT INTO @Results
SELECT
[SCH].[schema_id], [SCH].[name] AS [SCHEMA_NAME],
[objz].[object_id], [objz].[name] AS [OBJECT_NAME],
[IDX].[index_id], ISNULL([IDX].[name], '---') AS [index_name],
[partitions].[ROWS], [partitions].[SizeMB], INDEXPROPERTY([objz].[object_id], [IDX].[name], 'IndexDepth') AS [IndexDepth],
[IDX].[type], [IDX].[type_desc], [IDX].[fill_factor],
[IDX].[is_unique], [IDX].[is_primary_key], [IDX].[is_unique_constraint],
ISNULL([Index_Columns].[index_columns_key], '---') AS [index_columns_key],
ISNULL([Index_Columns].[index_columns_include], '---') AS [index_columns_include],
[IDX].[has_filter],
[IDX].[filter_definition],
[filz].[name],
ISNULL([p].[data_compression_desc],'')
FROM [sys].[objects] AS [objz]
INNER JOIN [sys].[schemas] AS [SCH] ON [objz].[schema_id]=[SCH].[schema_id]
INNER JOIN [sys].[indexes] AS [IDX] ON [objz].[object_id]=[IDX].[object_id]
INNER JOIN [sys].[filegroups] AS [filz] ON [IDX].[data_space_id] = [filz].[data_space_id]
INNER JOIN [sys].[partitions] AS [p] ON [IDX].[object_id] = [p].[object_id] AND [IDX].[index_id] = [p].[index_id]
INNER JOIN (
SELECT
[statz].[object_id], [statz].[index_id], SUM([statz].[row_count]) AS [ROWS],
CONVERT(NUMERIC(19,3), CONVERT(NUMERIC(19,3), SUM([statz].[in_row_reserved_page_count]+[statz].[lob_reserved_page_count]+[statz].[row_overflow_reserved_page_count]))/CONVERT(NUMERIC(19,3), 128)) AS [SizeMB]
FROM [sys].[dm_db_partition_stats] AS [statz]
GROUP BY [statz].[object_id], [statz].[index_id]
) AS [partitions]
ON [IDX].[object_id]=[partitions].[object_id]
AND [IDX].[index_id]=[partitions].[index_id]
CROSS APPLY (
SELECT
LEFT([Index_Columns].[index_columns_key], LEN([Index_Columns].[index_columns_key])-1) AS [index_columns_key],
LEFT([Index_Columns].[index_columns_include], LEN([Index_Columns].[index_columns_include])-1) AS [index_columns_include]
FROM
(
SELECT
(
SELECT QUOTENAME([colz].[name]) + CASE WHEN [IXCOLS].[is_descending_key] = 0 THEN ' asc' ELSE ' desc' END + ',' + ' '
FROM [sys].[index_columns] AS [IXCOLS]
INNER JOIN [sys].[columns] AS [colz]
ON [IXCOLS].[column_id] = [colz].[column_id]
AND [IXCOLS].[object_id] = [colz].[object_id]
WHERE [IXCOLS].[is_included_column] = 0
AND [IDX].[object_id] = [IXCOLS].[object_id]
AND [IDX].[index_id] = [IXCOLS].[index_id]
ORDER BY [IXCOLS].[key_ordinal]
FOR XML PATH('')
) AS [index_columns_key],
(
SELECT QUOTENAME([colz].[name]) + ',' + ' '
FROM [sys].[index_columns] AS [IXCOLS]
INNER JOIN [sys].[columns] AS [colz]
ON [IXCOLS].[column_id] = [colz].[column_id]
AND [IXCOLS].[object_id] = [colz].[object_id]
WHERE [IXCOLS].[is_included_column] = 1
AND [IDX].[object_id] = [IXCOLS].[object_id]
AND [IDX].[index_id] = [IXCOLS].[index_id]
ORDER BY [IXCOLS].[index_column_id]
FOR XML PATH('')
) AS [index_columns_include]
) AS [Index_Columns]
) AS [Index_Columns]
WHERE [SCH].[name] LIKE CASE
WHEN @SCHEMANAME = '' COLLATE SQL_Latin1_General_CP1_CI_AS
THEN [SCH].[name]
ELSE @SCHEMANAME
END
AND [objz].[name] LIKE CASE
WHEN @TBLNAME = '' COLLATE SQL_Latin1_General_CP1_CI_AS
THEN [objz].[name]
ELSE @TBLNAME
END
ORDER BY
[SCH].[name],
[objz].[name],
[IDX].[name];
--@Results table has both PK,s Uniques and indexes in thme...pull them out for adding to funal results:
SET @CONSTRAINTSQLS = '';
SET @INDEXSQLS = '';
SET @TemporalStatement = '';
SET @WithStatement = '';
--##############################################################################
-- Temporal tables
--##############################################################################
SELECT @TemporalStatement = ISNULL(@vbCrLf + 'PERIOD FOR SYSTEM_TIME ('
+ MAX(CASE WHEN [colz].[generated_always_type] = 1 THEN [colz].[name] ELSE '' END)
+','
+ MAX(CASE WHEN [colz].[generated_always_type] = 2 THEN [colz].[name] ELSE '' END)
+'),','') ,
@WithStatement = ISNULL(' SYSTEM_VERSIONING = ON (HISTORY_TABLE=' + QUOTENAME(OBJECT_SCHEMA_NAME([objz].[history_table_id])) + '.' + QUOTENAME(OBJECT_NAME([objz].[history_table_id])) + '),' ,'')
FROM [sys].[tables] [objz]
INNER JOIN [sys].[columns] [colz]
ON [objz].[object_id] = [colz].[object_id]
WHERE [colz].[object_id] = @TABLE_ID
AND [colz].[generated_always_type] > 0
GROUP BY [colz].[object_id],[objz].[history_table_id]
--##############################################################################
-- memory optimized
--##############################################################################
SELECT @WithStatement = @WithStatement + ISNULL('MEMORY_OPTIMIZED=ON, DURABILITY=' + [objz].[durability_desc] + ',','')
FROM [sys].[tables] [objz]
WHERE [objz].[is_memory_optimized] =1
AND [objz].[object_id] = @TABLE_ID
--##############################################################################
--constraints
--column store indexes are different: the "include" columns for normal indexes as scripted above are the columnstores indexed columns
--add a CASE for that situation.
--##############################################################################
SELECT @CONSTRAINTSQLS = @CONSTRAINTSQLS
+ CASE
WHEN [is_primary_key] = 1 OR [is_unique] = 1
THEN @vbCrLf
+ 'CONSTRAINT ' COLLATE SQL_Latin1_General_CP1_CI_AS + QUOTENAME([index_name]) + ' '
+ CASE
WHEN [is_primary_key] = 1
THEN ' PRIMARY KEY '
ELSE CASE
WHEN [is_unique] = 1
THEN ' UNIQUE '
ELSE ''
END
END
+ [type_desc]
+ CASE
WHEN [type_desc]='NONCLUSTERED'
THEN ''
ELSE ' '
END
+ ' (' + [index_columns_key] + ')'
+ CASE
WHEN [index_columns_include] <> '---'
THEN ' INCLUDE (' + [index_columns_include] + ')'
ELSE ''
END
+ CASE
WHEN [has_filter] = 1
THEN ' ' + [filter_definition]
ELSE ' '
END
+ CASE WHEN [fill_factor] <> 0 OR [CurrentCompression] <> 'NONE'
THEN ' WITH (' + CASE
WHEN [fill_factor] <> 0
THEN 'FILLFACTOR = ' + CONVERT(VARCHAR(30),[fill_factor])
ELSE ''
END
+ CASE
WHEN [fill_factor] <> 0 AND [CurrentCompression] <> 'NONE' THEN ',DATA_COMPRESSION = ' + [CurrentCompression] + ' '
WHEN [fill_factor] <> 0 AND [CurrentCompression] = 'NONE' THEN ''
WHEN [fill_factor] = 0 AND [CurrentCompression] <> 'NONE' THEN 'DATA_COMPRESSION = ' + [CurrentCompression] + ' '
ELSE ''
END
+ ')'
ELSE ''
END
ELSE ''
END + ','
FROM @Results
WHERE [type_desc] != 'HEAP'
AND [is_primary_key] = 1
OR [is_unique] = 1
ORDER BY
[is_primary_key] DESC,
[is_unique] DESC;
--
--##############################################################################
--indexes
--##############################################################################
SELECT @INDEXSQLS = @INDEXSQLS
+ CASE
WHEN [is_primary_key] = 0 OR [is_unique] = 0
THEN @vbCrLf
+ 'CREATE ' COLLATE SQL_Latin1_General_CP1_CI_AS + [type_desc] + ' INDEX ' COLLATE SQL_Latin1_General_CP1_CI_AS + QUOTENAME([index_name]) + ' '
+ @vbCrLf
+ ' ON ' COLLATE SQL_Latin1_General_CP1_CI_AS
+ QUOTENAME([SCHEMA_NAME]) + '.' + QUOTENAME([OBJECT_NAME])
+ CASE
WHEN [CurrentCompression] = 'COLUMNSTORE' COLLATE SQL_Latin1_General_CP1_CI_AS
THEN ' (' + [index_columns_include] + ')'
ELSE ' (' + [index_columns_key] + ')'
END
+ CASE
WHEN [CurrentCompression] = 'COLUMNSTORE' COLLATE SQL_Latin1_General_CP1_CI_AS
THEN '' COLLATE SQL_Latin1_General_CP1_CI_AS
ELSE
CASE
WHEN [index_columns_include] <> '---'
THEN @vbCrLf + ' INCLUDE (' COLLATE SQL_Latin1_General_CP1_CI_AS + [index_columns_include] + ')' COLLATE SQL_Latin1_General_CP1_CI_AS
ELSE '' COLLATE SQL_Latin1_General_CP1_CI_AS
END
END
--2008 filtered indexes syntax
+ CASE
WHEN [has_filter] = 1
THEN @vbCrLf + ' WHERE ' COLLATE SQL_Latin1_General_CP1_CI_AS + [filter_definition]
ELSE ''
END
+ CASE WHEN [fill_factor] <> 0 OR [CurrentCompression] <> 'NONE' COLLATE SQL_Latin1_General_CP1_CI_AS
THEN ' WITH (' COLLATE SQL_Latin1_General_CP1_CI_AS + CASE
WHEN [fill_factor] <> 0
THEN 'FILLFACTOR = ' COLLATE SQL_Latin1_General_CP1_CI_AS + CONVERT(VARCHAR(30),[fill_factor])
ELSE ''
END
+ CASE
WHEN [fill_factor] <> 0 AND [CurrentCompression] <> 'NONE' THEN ',DATA_COMPRESSION = ' + [CurrentCompression]+' '
WHEN [fill_factor] <> 0 AND [CurrentCompression] = 'NONE' THEN ''
WHEN [fill_factor] = 0 AND [CurrentCompression] <> 'NONE' THEN 'DATA_COMPRESSION = ' + [CurrentCompression]+' '
ELSE ''
END
+ ')'
ELSE ''
END
END
FROM @Results
WHERE [type_desc] != 'HEAP'
AND [is_primary_key] = 0
AND [is_unique] = 0
ORDER BY
[is_primary_key] DESC,
[is_unique] DESC;
IF @INDEXSQLS <> '' COLLATE SQL_Latin1_General_CP1_CI_AS
SET @INDEXSQLS = @vbCrLf + 'GO' COLLATE SQL_Latin1_General_CP1_CI_AS + @vbCrLf + @INDEXSQLS;
--##############################################################################
--CHECK Constraints
--##############################################################################
SET @CHECKCONSTSQLS = '' COLLATE SQL_Latin1_General_CP1_CI_AS;
SELECT
@CHECKCONSTSQLS = @CHECKCONSTSQLS
+ @vbCrLf
+ ISNULL('CONSTRAINT ' + QUOTENAME([objz].[name]) + ' '
+ SPACE(@STRINGLEN - LEN([objz].[name]))
+ ' CHECK ' + ISNULL([CHECKS].[definition],'')
+ ',','')
FROM [sys].[objects] AS [objz]
INNER JOIN [sys].[check_constraints] AS [CHECKS] ON [objz].[object_id] = [CHECKS].[object_id]
WHERE [objz].[type] = 'C'
AND [objz].[parent_object_id] = @TABLE_ID;
--##############################################################################
--FOREIGN KEYS
--##############################################################################
SET @FKSQLS = '' ;
SELECT
@FKSQLS=@FKSQLS
+ @vbCrLf + [MyAlias].[Command] FROM
(
SELECT
DISTINCT
--FK must be added AFTER the PK/unique constraints are added back.
850 AS [ExecutionOrder],
'CONSTRAINT '
+ QUOTENAME([conz].[name])
+ ' FOREIGN KEY ('
+ [ChildCollection].[ChildColumns]
+ ') REFERENCES '
+ QUOTENAME(SCHEMA_NAME([conz].[schema_id]))
+ '.'
+ QUOTENAME(OBJECT_NAME([conz].[referenced_object_id]))
+ ' (' + [ParentCollection].[ParentColumns]
+ ') '
+ CASE [conz].[update_referential_action]
WHEN 0 THEN '' --' ON UPDATE NO ACTION '
WHEN 1 THEN ' ON UPDATE CASCADE '
WHEN 2 THEN ' ON UPDATE SET NULL '
ELSE ' ON UPDATE SET DEFAULT '
END
+ CASE [conz].[delete_referential_action]
WHEN 0 THEN '' --' ON DELETE NO ACTION '
WHEN 1 THEN ' ON DELETE CASCADE '
WHEN 2 THEN ' ON DELETE SET NULL '
ELSE ' ON DELETE SET DEFAULT '
END
+ CASE [conz].[is_not_for_replication]
WHEN 1 THEN ' NOT FOR REPLICATION '
ELSE ''
END
+ ',' AS [Command]
FROM [sys].[foreign_keys] AS [conz]
INNER JOIN [sys].[foreign_key_columns] AS [colz]
ON [conz].[object_id] = [colz].[constraint_object_id]
INNER JOIN (--gets my child tables column names
SELECT
[conz].[name],
--technically, FK's can contain up to 16 columns, but real life is often a single column. coding here is for all columns
[ChildColumns] = STUFF((SELECT
',' + QUOTENAME([REFZ].[name])
FROM [sys].[foreign_key_columns] AS [fkcolz]
INNER JOIN [sys].[columns] AS [REFZ]
ON [fkcolz].[parent_object_id] = [REFZ].[object_id]
AND [fkcolz].[parent_column_id] = [REFZ].[column_id]
WHERE [fkcolz].[parent_object_id] = [conz].[parent_object_id]
AND [fkcolz].[constraint_object_id] = [conz].[object_id]
ORDER BY
[fkcolz].[constraint_column_id]
FOR XML PATH(''), TYPE).[value]('.','varchar(max)'),1,1,'')
FROM [sys].[foreign_keys] AS [conz]
INNER JOIN [sys].[foreign_key_columns] AS [colz]
ON [conz].[object_id] = [colz].[constraint_object_id]
WHERE [conz].[parent_object_id]= @TABLE_ID
GROUP BY
[conz].[name],
[conz].[parent_object_id],--- without GROUP BY multiple rows are returned
[conz].[object_id]
) AS [ChildCollection]
ON [conz].[name] = [ChildCollection].[name]
INNER JOIN (--gets the parent tables column names for the FK reference
SELECT
[conz].[name],
[ParentColumns] = STUFF((SELECT
',' + [REFZ].[name]
FROM [sys].[foreign_key_columns] AS [fkcolz]
INNER JOIN [sys].[columns] AS [REFZ]
ON [fkcolz].[referenced_object_id] = [REFZ].[object_id]
AND [fkcolz].[referenced_column_id] = [REFZ].[column_id]
WHERE [fkcolz].[referenced_object_id] = [conz].[referenced_object_id]
AND [fkcolz].[constraint_object_id] = [conz].[object_id]
ORDER BY [fkcolz].[constraint_column_id]
FOR XML PATH(''), TYPE).[value]('.','varchar(max)'),1,1,'')
FROM [sys].[foreign_keys] AS [conz]
INNER JOIN [sys].[foreign_key_columns] AS [colz]
ON [conz].[object_id] = [colz].[constraint_object_id]
-- AND colz.parent_column_id
GROUP BY
[conz].[name],
[conz].[referenced_object_id],--- without GROUP BY multiple rows are returned
[conz].[object_id]
) AS [ParentCollection]
ON [conz].[name] = [ParentCollection].[name]
)AS [MyAlias];
--##############################################################################
--RULES
--##############################################################################
SET @RULESCONSTSQLS = '';
SELECT
@RULESCONSTSQLS = @RULESCONSTSQLS
+ ISNULL(
@vbCrLf
+ 'if not exists(SELECT [name] FROM sys.objects WHERE TYPE=''R'' AND schema_id = ' COLLATE SQL_Latin1_General_CP1_CI_AS + CONVERT(VARCHAR(30),[objz].[schema_id]) + ' AND [name] = ''' COLLATE SQL_Latin1_General_CP1_CI_AS + QUOTENAME(OBJECT_NAME([colz].[rule_object_id])) + ''')' COLLATE SQL_Latin1_General_CP1_CI_AS + @vbCrLf
+ [MODS].[definition] + @vbCrLf + 'GO' COLLATE SQL_Latin1_General_CP1_CI_AS + @vbCrLf
+ 'EXEC sp_binderule ' + QUOTENAME([objz].[name]) + ', ''' + QUOTENAME(OBJECT_NAME([colz].[object_id])) + '.' + QUOTENAME([colz].[name]) + '''' COLLATE SQL_Latin1_General_CP1_CI_AS + @vbCrLf + 'GO' COLLATE SQL_Latin1_General_CP1_CI_AS ,'')
FROM [sys].[columns] [colz]
INNER JOIN [sys].[objects] [objz]
ON [objz].[object_id] = [colz].[object_id]
INNER JOIN [sys].[sql_modules] AS [MODS]
ON [colz].[rule_object_id] = [MODS].[object_id]
WHERE [colz].[rule_object_id] <> 0
AND [colz].[object_id] = @TABLE_ID;
--##############################################################################
--TRIGGERS
--##############################################################################
SET @TRIGGERSTATEMENT = '';
SELECT
@TRIGGERSTATEMENT = @TRIGGERSTATEMENT + @vbCrLf + [MODS].[definition] + @vbCrLf + 'GO'
FROM [sys].[sql_modules] AS [MODS]
WHERE [MODS].[object_id] IN(SELECT
[objz].[object_id]
FROM [sys].[objects] AS [objz]
WHERE [objz].[type] = 'TR'
AND [objz].[parent_object_id] = @TABLE_ID);
IF @TRIGGERSTATEMENT <> '' COLLATE SQL_Latin1_General_CP1_CI_AS
SET @TRIGGERSTATEMENT = @vbCrLf + 'GO' COLLATE SQL_Latin1_General_CP1_CI_AS + @vbCrLf + @TRIGGERSTATEMENT;
--##############################################################################
--NEW SECTION QUERY ALL EXTENDED PROPERTIES
--##############################################################################
SET @EXTENDEDPROPERTIES = '';
SELECT @EXTENDEDPROPERTIES =
@EXTENDEDPROPERTIES + @vbCrLf +
'EXEC sys.sp_addextendedproperty
@name = N''' COLLATE SQL_Latin1_General_CP1_CI_AS + [name] + ''', @value = N''' COLLATE SQL_Latin1_General_CP1_CI_AS + REPLACE(CONVERT(VARCHAR(MAX),[value]),'''','''''') + ''',
@level0type = N''SCHEMA'', @level0name = ' COLLATE SQL_Latin1_General_CP1_CI_AS + QUOTENAME(@SCHEMANAME) + ',
@level1type = N''TABLE'', @level1name = ' COLLATE SQL_Latin1_General_CP1_CI_AS + QUOTENAME(@TBLNAME) + ';'
--SELECT objtype, objname, name, value
FROM [sys].[fn_listextendedproperty] (NULL, 'schema', @SCHEMANAME, 'table', @TBLNAME, NULL, NULL);
--OMacoder suggestion for column extended properties http://www.sqlservercentral.com/Forums/FindPost1651606.aspx
;WITH [obj] AS (
SELECT [split].[a].[value]('.', 'VARCHAR(20)') AS [name]
FROM (
SELECT CAST ('<M>' + REPLACE('column,constraint,index,trigger,parameter', ',', '</M><M>') + '</M>' AS XML) AS [data]
) AS [A]
CROSS APPLY [data].[nodes] ('/M') AS [split]([a])
)
SELECT
@EXTENDEDPROPERTIES =
@EXTENDEDPROPERTIES + @vbCrLf + @vbCrLf +
'EXEC sys.sp_addextendedproperty
@name = N''' COLLATE SQL_Latin1_General_CP1_CI_AS
+ [lep].[name]
+ ''', @value = N''' COLLATE SQL_Latin1_General_CP1_CI_AS
+ REPLACE(CONVERT(VARCHAR(MAX),[lep].[value]),'''','''''') + ''',
@level0type = N''SCHEMA'', @level0name = ' COLLATE SQL_Latin1_General_CP1_CI_AS
+ QUOTENAME(@SCHEMANAME)
+ ',
@level1type = N''TABLE'', @level1name = ' COLLATE SQL_Latin1_General_CP1_CI_AS
+ QUOTENAME(@TBLNAME)
+ ',
@level2type = N''' COLLATE SQL_Latin1_General_CP1_CI_AS
+ UPPER([obj].[name])
+ ''', @level2name = ' COLLATE SQL_Latin1_General_CP1_CI_AS
+ QUOTENAME([lep].[objname]) + ';' COLLATE SQL_Latin1_General_CP1_CI_AS
--SELECT objtype, objname, name, value
FROM [obj]
CROSS APPLY [sys].[fn_listextendedproperty] (NULL, 'schema', @SCHEMANAME, 'table', @TBLNAME, [obj].[name], NULL) AS [lep];
IF @EXTENDEDPROPERTIES <> '' COLLATE SQL_Latin1_General_CP1_CI_AS
SET @EXTENDEDPROPERTIES = @vbCrLf + 'GO' COLLATE SQL_Latin1_General_CP1_CI_AS + @vbCrLf + @EXTENDEDPROPERTIES;
--##############################################################################
--FINAL CLEANUP AND PRESENTATION
--##############################################################################
--at this point, there is a trailing comma, or it blank
--WITH statment has a trailing comma
IF @WithStatement > ''
SET @WithStatement='WITH (' + SUBSTRING(@WithStatement,1,LEN(@WithStatement) -1) + ')'
SELECT
@FINALSQL = @FINALSQL
+ @TemporalStatement
+ @CONSTRAINTSQLS
+ @CHECKCONSTSQLS
+ @FKSQLS;
--note that this trims the trailing comma from the end of the statements
SET @FINALSQL = SUBSTRING(@FINALSQL,1,LEN(@FINALSQL) -1) ;
SET @FINALSQL = @FINALSQL + ')' COLLATE SQL_Latin1_General_CP1_CI_AS + @vbCrLf + @WithStatement COLLATE SQL_Latin1_General_CP1_CI_AS + @vbCrLf ;
SET @input = @vbCrLf
+ @FINALSQL
+ @INDEXSQLS
+ @RULESCONSTSQLS
+ @TRIGGERSTATEMENT
+ @EXTENDEDPROPERTIES;
SELECT @input AS [Item];
RETURN 0;
--##############################################################################
-- END Normal Table Processing
--##############################################################################
--simple, primitive version to get the results of a TEMP table from the TEMP db.
--##############################################################################
-- NEW Temp Table Logic
--##############################################################################
TEMPPROCESS:
SELECT @TABLE_ID = OBJECT_ID('tempdb..' COLLATE SQL_Latin1_General_CP1_CI_AS + @TBLNAME);
--##############################################################################
-- Valid temp Table, Continue Processing
--##############################################################################
SELECT @FINALSQL =
CASE
WHEN [tabz].[history_table_id] IS NULL
THEN ''
ELSE 'ALTER TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME([tabz].[object_id]) ) + '.' + QUOTENAME(OBJECT_NAME([tabz].[object_id])) + ' SET (SYSTEM_VERSIONING = OFF);' + @vbCrLf
+ 'IF OBJECT_ID(''' + QUOTENAME(OBJECT_SCHEMA_NAME([tabz].[history_table_id]) ) + '.' + QUOTENAME(OBJECT_NAME([tabz].[history_table_id])) + ''') IS NOT NULL ' + @vbCrLf
+ 'DROP TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME([tabz].[history_table_id])) + '.' + QUOTENAME(OBJECT_NAME([tabz].[history_table_id])) + ' ' + @vbCrLf + 'GO' + @vbCrLf
END
+ 'IF OBJECT_ID(''' + QUOTENAME(OBJECT_SCHEMA_NAME([tabz].[object_id]) ) + '.' + QUOTENAME(OBJECT_NAME([tabz].[object_id])) + ''') IS NOT NULL ' + @vbCrLf
+ 'DROP TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME([tabz].[object_id])) + '.' + QUOTENAME(OBJECT_NAME([tabz].[object_id])) + ' ' + @vbCrLf + 'GO' + @vbCrLf
+ 'CREATE TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME([tabz].[object_id])) + '.' + QUOTENAME(OBJECT_NAME([tabz].[object_id])) + ' ( '
FROM [sys].[tables] [tabz] WHERE [tabz].[object_id] = OBJECT_ID(@TABLE_ID)
--removed invalid code here which potentially selected wrong table--thansk David Grifiths @SSC!
SELECT
@STRINGLEN = MAX(LEN([colz].[name])) + 1
FROM [tempdb].[sys].[objects] AS [objz]
INNER JOIN [tempdb].[sys].[columns] AS [colz]
ON [objz].[object_id] = [colz].[object_id]
AND [objz].[object_id] = @TABLE_ID;
--##############################################################################
--Get the hash index definitions for memory optimized tables, if any.
--##############################################################################
--##############################################################################
--Get the columns, their definitions and defaults.
--##############################################################################
SELECT
@FINALSQL = @FINALSQL
+ CASE
WHEN [colz].[is_computed] = 1
THEN @vbCrLf
+ QUOTENAME([colz].[name])
+ ' '
+ SPACE(@STRINGLEN - LEN([colz].[name]))
+ 'AS ' + ISNULL([CALC].[definition],'')
+ CASE
WHEN [CALC].[is_persisted] = 1
THEN ' PERSISTED'
ELSE ''
END
ELSE @vbCrLf
+ QUOTENAME([colz].[name])
+ ' '
+ SPACE(@STRINGLEN - LEN([colz].[name]))
+ UPPER(TYPE_NAME([colz].[user_type_id]))
+ CASE
-- data types with precision and scale IE DECIMAL(18,3), NUMERIC(10,2)
WHEN TYPE_NAME([colz].[user_type_id]) IN ('decimal','numeric')
THEN '('
+ CONVERT(VARCHAR,[colz].[precision])
+ ','
+ CONVERT(VARCHAR,[colz].[scale])
+ ') '
+ SPACE(6 - LEN(CONVERT(VARCHAR,[colz].[precision])
+ ','
+ CONVERT(VARCHAR,[colz].[scale])))
+ SPACE(7)
+ SPACE(16 - LEN(TYPE_NAME([colz].[user_type_id])))
+ CASE
WHEN [colz].[is_identity] = 1
THEN ' IDENTITY(1,1)'
ELSE ''
----WHEN COLUMNPROPERTY ( @TABLE_ID , COLS.[name] , 'IsIdentity' ) = 1
----THEN ' IDENTITY('
---- + CONVERT(VARCHAR,ISNULL(IDENT_SEED('tempdb..' + @TBLNAME),1) )
---- + ','
---- + CONVERT(VARCHAR,ISNULL(IDENT_INCR('tempdb..' + @TBLNAME),1) )
---- + ')'
----ELSE ''
END
+ CASE WHEN [colz].[is_sparse] = 1 THEN ' sparse' ELSE ' ' END
+ CASE
WHEN [colz].[is_nullable] = 0
THEN ' NOT NULL'
ELSE ' NULL'
END
-- data types with scale IE datetime2(7),TIME(7)
WHEN TYPE_NAME([colz].[user_type_id]) IN ('datetime2','datetimeoffset','time')
THEN CASE
WHEN [colz].[scale] < 7 THEN
'('
+ CONVERT(VARCHAR,[colz].[scale])
+ ') '
ELSE
' '
END
+ SPACE(4)
+ SPACE(@ObjectDataTypeLen - LEN(TYPE_NAME([colz].[user_type_id])))
+ ' '
+ CASE WHEN [colz].[is_sparse] = 1 THEN ' sparse' ELSE ' ' END
+ CASE [colz].[generated_always_type]
WHEN 0 THEN ''
WHEN 1 THEN ' GENERATED ALWAYS AS ROW START'
WHEN 2 THEN ' GENERATED ALWAYS AS ROW END'
ELSE ''
END
+ CASE WHEN [colz].[is_hidden] = 1 THEN ' HIDDEN' ELSE '' END
+ CASE
WHEN [colz].[is_nullable] = 0
THEN ' NOT NULL'
ELSE ' NULL'
END
--data types with no/precision/scale,IE FLOAT
WHEN TYPE_NAME([colz].[user_type_id]) IN ('float') --,'real')
THEN
--addition: if 53, no need to specifically say (53), otherwise display it
CASE
WHEN [colz].[precision] = 53
THEN SPACE(11 - LEN(CONVERT(VARCHAR,[colz].[precision])))
+ SPACE(7)
+ SPACE(@ObjectDataTypeLen - LEN(TYPE_NAME([colz].[user_type_id])))
+ CASE WHEN [colz].[is_sparse] = 1 THEN ' sparse' ELSE ' ' END
+ CASE
WHEN [colz].[is_nullable] = 0
THEN ' NOT NULL'
ELSE ' NULL'
END
ELSE '('
+ CONVERT(VARCHAR,[colz].[precision])
+ ') '
+ SPACE(6 - LEN(CONVERT(VARCHAR,[colz].[precision])))
+ SPACE(7) + SPACE(@ObjectDataTypeLen - LEN(TYPE_NAME([colz].[user_type_id])))
+ CASE WHEN [colz].[is_sparse] = 1 THEN ' sparse' ELSE ' ' END
+ CASE
WHEN [colz].[is_nullable] = 0
THEN ' NOT NULL'
ELSE ' NULL'
END
END
--ie VARCHAR(40)
--##############################################################################
-- COLLATE STATEMENTS in tempdb!
-- personally i do not like collation statements,
-- but included here to make it easy on those who do
--##############################################################################
WHEN TYPE_NAME([colz].[user_type_id]) IN ('char','varchar','binary','varbinary')
THEN CASE
WHEN [colz].[max_length] = -1
THEN '(max)'
+ SPACE(6 - LEN(CONVERT(VARCHAR,[colz].[max_length])))
+ SPACE(7) + SPACE(@ObjectDataTypeLen - LEN(TYPE_NAME([colz].[user_type_id])))
----collate to comment out when not desired
--+ CASE
-- WHEN COLS.collation_name IS NULL
-- THEN ''
-- ELSE ' COLLATE ' + COLS.collation_name
-- END
+ CASE WHEN [colz].[is_sparse] = 1 THEN ' sparse' ELSE ' ' END
+ CASE
WHEN [colz].[is_nullable] = 0
THEN ' NOT NULL'
ELSE ' NULL'
END
ELSE '('
+ CONVERT(VARCHAR,[colz].[max_length])
+ ') '
+ SPACE(6 - LEN(CONVERT(VARCHAR,[colz].[max_length])))
+ SPACE(7) + SPACE(@ObjectDataTypeLen - LEN(TYPE_NAME([colz].[user_type_id])))
----collate to comment out when not desired
--+ CASE
-- WHEN COLS.collation_name IS NULL
-- THEN ''
-- ELSE ' COLLATE ' + COLS.collation_name
-- END
+ CASE WHEN [colz].[is_sparse] = 1 THEN ' sparse' ELSE ' ' END
+ CASE
WHEN [colz].[is_nullable] = 0
THEN ' NOT NULL'
ELSE ' NULL'
END
END
--data type with max_length ( BUT DOUBLED) ie NCHAR(33), NVARCHAR(40)
WHEN TYPE_NAME([colz].[user_type_id]) IN ('nchar','nvarchar')
THEN CASE
WHEN [colz].[max_length] = -1
THEN '(max)'
+ SPACE(5 - LEN(CONVERT(VARCHAR,([colz].[max_length] / 2))))
+ SPACE(7)
+ SPACE(@ObjectDataTypeLen - LEN(TYPE_NAME([colz].[user_type_id])))
-- --collate to comment out when not desired
--+ CASE
-- WHEN COLS.collation_name IS NULL
-- THEN ''
-- ELSE ' COLLATE ' + COLS.collation_name
-- END
+ CASE WHEN [colz].[is_sparse] = 1 THEN ' sparse' ELSE ' ' END
+ CASE
WHEN [colz].[is_nullable] = 0
THEN ' NOT NULL'
ELSE ' NULL'
END
ELSE '('
+ CONVERT(VARCHAR,([colz].[max_length] / 2))
+ ') '
+ SPACE(6 - LEN(CONVERT(VARCHAR,([colz].[max_length] / 2))))
+ SPACE(7)
+ SPACE(@ObjectDataTypeLen - LEN(TYPE_NAME([colz].[user_type_id])))
-- --collate to comment out when not desired
--+ CASE
-- WHEN COLS.collation_name IS NULL
-- THEN ''
-- ELSE ' COLLATE ' + COLS.collation_name
-- END
+ CASE WHEN [colz].[is_sparse] = 1 THEN ' sparse' ELSE ' ' END
+ CASE
WHEN [colz].[is_nullable] = 0
THEN ' NOT NULL'
ELSE ' NULL'
END
END
-- other data type IE INT, DATETIME, MONEY, CUSTOM DATA TYPE,...
WHEN TYPE_NAME([colz].[user_type_id]) IN ('datetime','money','text','image','real')
THEN SPACE(18 - LEN(TYPE_NAME([colz].[user_type_id])))
+ ' '
+ CASE WHEN [colz].[is_sparse] = 1 THEN ' sparse' ELSE ' ' END
+ CASE
WHEN [colz].[is_nullable] = 0
THEN ' NOT NULL'
ELSE ' NULL'
END
--IE INT
ELSE SPACE(@ObjectDataTypeLen - LEN(TYPE_NAME([colz].[user_type_id])))
+ CASE
WHEN [colz].[is_identity] = 1
THEN ' IDENTITY(1,1)'
ELSE ' '
----WHEN COLUMNPROPERTY ( @TABLE_ID , COLS.[name] , 'IsIdentity' ) = 1
----THEN ' IDENTITY('
---- + CONVERT(VARCHAR,ISNULL(IDENT_SEED('tempdb..' + @TBLNAME),1) )
---- + ','
---- + CONVERT(VARCHAR,ISNULL(IDENT_INCR('tempdb..' + @TBLNAME),1) )
---- + ')'
----ELSE ' '
END
+ SPACE(2)
+ CASE WHEN [colz].[is_sparse] = 1 THEN ' sparse' ELSE ' ' END
+ CASE
WHEN [colz].[is_nullable] = 0
THEN ' NOT NULL'
ELSE ' NULL'
END
END
+ CASE
WHEN [colz].[default_object_id] = 0
THEN ''
ELSE ' DEFAULT ' + ISNULL([DEF].[definition] ,'')
--optional section in case NAMED default cosntraints are needed:
--ELSE ' CONSTRAINT [' + DEF.name + '] DEFAULT '+ REPLACE(REPLACE(ISNULL(DEF.[definition] ,''),'((','('),'))',')')
--i thought it needed to be handled differently! NOT!
END --CASE cdefault
END --iscomputed
+ ','
FROM [tempdb].[sys].[columns] AS [colz]
LEFT OUTER JOIN [tempdb].[sys].[default_constraints] AS [DEF]
ON [colz].[default_object_id] = [DEF].[object_id]
LEFT OUTER JOIN [tempdb].[sys].[computed_columns] AS [CALC]
ON [colz].[object_id] = [CALC].[object_id]
AND [colz].[column_id] = [CALC].[column_id]
WHERE [colz].[object_id]=@TABLE_ID
ORDER BY [colz].[column_id];
--##############################################################################
--used for formatting the rest of the constraints:
--##############################################################################
SELECT
@STRINGLEN = MAX(LEN([objz].[name])) + 1
FROM [tempdb].[sys].[objects] AS [objz];
--##############################################################################
--PK/Unique Constraints and Indexes, using the 2005/08 INCLUDE syntax
--##############################################################################
DECLARE @Results2 TABLE (
[SCHEMA_ID] INT,
[SCHEMA_NAME] VARCHAR(255),
[OBJECT_ID] INT,
[OBJECT_NAME] VARCHAR(255),
[index_id] INT,
[index_name] VARCHAR(255),
[ROWS] BIGINT,
[SizeMB] DECIMAL(19,3),
[IndexDepth] INT,
[TYPE] INT,
[type_desc] VARCHAR(30),
[fill_factor] INT,
[is_unique] INT,
[is_primary_key] INT ,
[is_unique_constraint] INT,
[index_columns_key] VARCHAR(MAX),
[index_columns_include] VARCHAR(MAX),
[has_filter] BIT ,
[filter_definition] VARCHAR(MAX),
[currentFilegroupName] VARCHAR(128),
[CurrentCompression] VARCHAR(128));
INSERT INTO @Results2
SELECT
[SCH].[schema_id], [SCH].[name] AS [SCHEMA_NAME],
[objz].[object_id], [objz].[name] AS [OBJECT_NAME],
[IDX].[index_id], ISNULL([IDX].[name], '---') AS [index_name],
[partitions].[ROWS], [partitions].[SizeMB], INDEXPROPERTY([objz].[object_id], [IDX].[name], 'IndexDepth') AS [IndexDepth],
[IDX].[type], [IDX].[type_desc], [IDX].[fill_factor],
[IDX].[is_unique], [IDX].[is_primary_key], [IDX].[is_unique_constraint],
ISNULL([Index_Columns].[index_columns_key], '---') AS [index_columns_key],
ISNULL([Index_Columns].[index_columns_include], '---') AS [index_columns_include],
[IDX].[has_filter],
[IDX].[filter_definition],
[filz].[name],
ISNULL([p].[data_compression_desc],'')
FROM [tempdb].[sys].[objects] AS [objz]
INNER JOIN [tempdb].[sys].[schemas] AS [SCH] ON [objz].[schema_id]=[SCH].[schema_id]
INNER JOIN [tempdb].[sys].[indexes] AS [IDX] ON [objz].[object_id]=[IDX].[object_id]
INNER JOIN [sys].[filegroups] AS [filz] ON [IDX].[data_space_id] = [filz].[data_space_id]
INNER JOIN [sys].[partitions] AS [p] ON [IDX].[object_id] = [p].[object_id] AND [IDX].[index_id] = [p].[index_id]
INNER JOIN (
SELECT
[statz].[object_id], [statz].[index_id], SUM([statz].[row_count]) AS [ROWS],
CONVERT(NUMERIC(19,3), CONVERT(NUMERIC(19,3), SUM([statz].[in_row_reserved_page_count]+[statz].[lob_reserved_page_count]+[statz].[row_overflow_reserved_page_count]))/CONVERT(NUMERIC(19,3), 128)) AS [SizeMB]
FROM [tempdb].[sys].[dm_db_partition_stats] AS [statz]
GROUP BY [statz].[object_id], [statz].[index_id]
) AS [partitions]
ON [IDX].[object_id]=[partitions].[object_id]
AND [IDX].[index_id]=[partitions].[index_id]
CROSS APPLY (
SELECT
LEFT([Index_Columns].[index_columns_key], LEN([Index_Columns].[index_columns_key])-1) AS [index_columns_key],
LEFT([Index_Columns].[index_columns_include], LEN([Index_Columns].[index_columns_include])-1) AS [index_columns_include]
FROM
(
SELECT
(
SELECT QUOTENAME([colz].[name]) + CASE WHEN [IXCOLS].[is_descending_key] = 0 THEN ' asc' ELSE ' desc' END + ',' + ' '
FROM [tempdb].[sys].[index_columns] AS [IXCOLS]
INNER JOIN [tempdb].[sys].[columns] AS [colz]
ON [IXCOLS].[column_id] = [colz].[column_id]
AND [IXCOLS].[object_id] = [colz].[object_id]
WHERE [IXCOLS].[is_included_column] = 0
AND [IDX].[object_id] = [IXCOLS].[object_id]
AND [IDX].[index_id] = [IXCOLS].[index_id]
ORDER BY [IXCOLS].[key_ordinal]
FOR XML PATH('')
) AS [index_columns_key],
(
SELECT QUOTENAME([colz].[name]) + ',' + ' '
FROM [tempdb].[sys].[index_columns] AS [IXCOLS]
INNER JOIN [tempdb].[sys].[columns] AS [colz]
ON [IXCOLS].[column_id] = [colz].[column_id]
AND [IXCOLS].[object_id] = [colz].[object_id]
WHERE [IXCOLS].[is_included_column] = 1
AND [IDX].[object_id] = [IXCOLS].[object_id]
AND [IDX].[index_id] = [IXCOLS].[index_id]
ORDER BY [IXCOLS].[index_column_id]
FOR XML PATH('')
) AS [index_columns_include]
) AS [Index_Columns]
) AS [Index_Columns]
WHERE [SCH].[name] LIKE CASE
WHEN @SCHEMANAME = '' COLLATE SQL_Latin1_General_CP1_CI_AS
THEN [SCH].[name]
ELSE @SCHEMANAME
END
AND [objz].[name] LIKE CASE
WHEN @TBLNAME = '' COLLATE SQL_Latin1_General_CP1_CI_AS
THEN [objz].[name]
ELSE @TBLNAME
END
ORDER BY
[SCH].[name],
[objz].[name],
[IDX].[name];
--@Results2 table has both PK,s Uniques and indexes in thme...pull them out for adding to funal results:
SET @CONSTRAINTSQLS = '' COLLATE SQL_Latin1_General_CP1_CI_AS;
SET @INDEXSQLS = '' COLLATE SQL_Latin1_General_CP1_CI_AS;
--##############################################################################
--constraints
--##############################################################################
SELECT @CONSTRAINTSQLS = @CONSTRAINTSQLS
+ CASE
WHEN [is_primary_key] = 1 OR [is_unique] = 1
THEN @vbCrLf
+ 'CONSTRAINT ' COLLATE SQL_Latin1_General_CP1_CI_AS + QUOTENAME([index_name]) + ' '
+ SPACE(@STRINGLEN - LEN([index_name]))
+ CASE
WHEN [is_primary_key] = 1
THEN ' PRIMARY KEY ' COLLATE SQL_Latin1_General_CP1_CI_AS
ELSE CASE
WHEN [is_unique] = 1
THEN ' UNIQUE ' COLLATE SQL_Latin1_General_CP1_CI_AS
ELSE '' COLLATE SQL_Latin1_General_CP1_CI_AS
END
END
+ [type_desc]
+ CASE
WHEN [type_desc]='NONCLUSTERED'
THEN '' COLLATE SQL_Latin1_General_CP1_CI_AS
ELSE ' '
END
+ ' (' + [index_columns_key] + ')'
+ CASE
WHEN [index_columns_include] <> '---'
THEN ' INCLUDE (' + [index_columns_include] + ')'
ELSE '' COLLATE SQL_Latin1_General_CP1_CI_AS
END
+ CASE
WHEN [has_filter] = 1
THEN ' ' + [filter_definition]
ELSE ' '
END
+ CASE WHEN [fill_factor] <> 0 OR [CurrentCompression] <> 'NONE'
THEN ' WITH (' + CASE
WHEN [fill_factor] <> 0
THEN 'FILLFACTOR = ' + CONVERT(VARCHAR(30),[fill_factor])
ELSE '' COLLATE SQL_Latin1_General_CP1_CI_AS
END
+ CASE
WHEN [fill_factor] <> 0 AND [CurrentCompression] <> 'NONE' THEN ',DATA_COMPRESSION = ' + [CurrentCompression] + ' '
WHEN [fill_factor] <> 0 AND [CurrentCompression] = 'NONE' THEN ''
WHEN [fill_factor] = 0 AND [CurrentCompression] <> 'NONE' THEN 'DATA_COMPRESSION = ' + [CurrentCompression] + ' '
ELSE '' COLLATE SQL_Latin1_General_CP1_CI_AS
END
+ ')'
ELSE '' COLLATE SQL_Latin1_General_CP1_CI_AS
END
ELSE '' COLLATE SQL_Latin1_General_CP1_CI_AS
END + ','
FROM @Results2
WHERE [type_desc] != 'HEAP'
AND [is_primary_key] = 1
OR [is_unique] = 1
ORDER BY
[is_primary_key] DESC,
[is_unique] DESC;
--##############################################################################
--indexes
--##############################################################################
SELECT @INDEXSQLS = @INDEXSQLS
+ CASE
WHEN [is_primary_key] = 0 OR [is_unique] = 0
THEN @vbCrLf
+ 'CREATE ' COLLATE SQL_Latin1_General_CP1_CI_AS + [type_desc] + ' INDEX ' COLLATE SQL_Latin1_General_CP1_CI_AS + QUOTENAME([index_name]) + ' ' COLLATE SQL_Latin1_General_CP1_CI_AS
+ @vbCrLf
+ ' ON ' COLLATE SQL_Latin1_General_CP1_CI_AS
+ QUOTENAME([SCHEMA_NAME]) + '.' + QUOTENAME([OBJECT_NAME])
+ CASE
WHEN [CurrentCompression] = 'COLUMNSTORE' COLLATE SQL_Latin1_General_CP1_CI_AS
THEN ' (' COLLATE SQL_Latin1_General_CP1_CI_AS+ [index_columns_include] + ')' COLLATE SQL_Latin1_General_CP1_CI_AS
ELSE ' (' COLLATE SQL_Latin1_General_CP1_CI_AS+ [index_columns_key] + ')' COLLATE SQL_Latin1_General_CP1_CI_AS
END
+ CASE
WHEN [CurrentCompression] = 'COLUMNSTORE' COLLATE SQL_Latin1_General_CP1_CI_AS
THEN '' COLLATE SQL_Latin1_General_CP1_CI_AS
ELSE
CASE
WHEN [index_columns_include] <> '---'
THEN @vbCrLf + ' INCLUDE (' COLLATE SQL_Latin1_General_CP1_CI_AS + [index_columns_include] + ')' COLLATE SQL_Latin1_General_CP1_CI_AS
ELSE '' COLLATE SQL_Latin1_General_CP1_CI_AS
END
END
--2008 filtered indexes syntax
+ CASE
WHEN [has_filter] = 1
THEN @vbCrLf + ' WHERE ' COLLATE SQL_Latin1_General_CP1_CI_AS + [filter_definition]
ELSE '' COLLATE SQL_Latin1_General_CP1_CI_AS
END
+ CASE WHEN [fill_factor] <> 0 OR [CurrentCompression] <> 'NONE' COLLATE SQL_Latin1_General_CP1_CI_AS
THEN ' WITH (' COLLATE SQL_Latin1_General_CP1_CI_AS + CASE
WHEN [fill_factor] <> 0
THEN 'FILLFACTOR = ' COLLATE SQL_Latin1_General_CP1_CI_AS + CONVERT(VARCHAR(30),[fill_factor])
ELSE '' COLLATE SQL_Latin1_General_CP1_CI_AS
END
+ CASE
WHEN [fill_factor] <> 0 AND [CurrentCompression] <> 'NONE' COLLATE SQL_Latin1_General_CP1_CI_AS THEN ',DATA_COMPRESSION = ' COLLATE SQL_Latin1_General_CP1_CI_AS + [CurrentCompression] + ' '
WHEN [fill_factor] <> 0 AND [CurrentCompression] = 'NONE' COLLATE SQL_Latin1_General_CP1_CI_AS THEN '' COLLATE SQL_Latin1_General_CP1_CI_AS
WHEN [fill_factor] = 0 AND [CurrentCompression] <> 'NONE' COLLATE SQL_Latin1_General_CP1_CI_AS THEN 'DATA_COMPRESSION = ' COLLATE SQL_Latin1_General_CP1_CI_AS+ [CurrentCompression] + ' '
ELSE '' COLLATE SQL_Latin1_General_CP1_CI_AS
END
+ ')' COLLATE SQL_Latin1_General_CP1_CI_AS
ELSE '' COLLATE SQL_Latin1_General_CP1_CI_AS
END
END
FROM @Results2
WHERE [type_desc] != 'HEAP'
AND [is_primary_key] = 0
AND [is_unique] = 0
ORDER BY
[is_primary_key] DESC,
[is_unique] DESC;
IF @INDEXSQLS <> '' COLLATE SQL_Latin1_General_CP1_CI_AS
SET @INDEXSQLS = @vbCrLf + 'GO' COLLATE SQL_Latin1_General_CP1_CI_AS+ @vbCrLf + @INDEXSQLS;
--##############################################################################
--CHECK Constraints
--##############################################################################
SET @CHECKCONSTSQLS = '';
SELECT
@CHECKCONSTSQLS = @CHECKCONSTSQLS
+ @vbCrLf
+ ISNULL('CONSTRAINT ' + QUOTENAME([objz].[name]) + ' '
+ SPACE(@STRINGLEN - LEN([objz].[name]))
+ ' CHECK ' + ISNULL([CHECKS].[definition],'')
+ ',','')
FROM [tempdb].[sys].[objects] AS [objz]
INNER JOIN [tempdb].[sys].[check_constraints] AS [CHECKS] ON [objz].[object_id] = [CHECKS].[object_id]
WHERE [objz].[type] = 'C'
AND [objz].[parent_object_id] = @TABLE_ID;
--##############################################################################
--FOREIGN KEYS
--##############################################################################
SET @FKSQLS = '' ;
SELECT
@FKSQLS=@FKSQLS
+ @vbCrLf + [MyAlias].[Command] FROM
(
SELECT
DISTINCT
--FK must be added AFTER the PK/unique constraints are added back.
850 AS [ExecutionOrder],
'CONSTRAINT '
+ QUOTENAME([conz].[name])
+ ' FOREIGN KEY ('
+ [ChildCollection].[ChildColumns]
+ ') REFERENCES '
+ QUOTENAME(SCHEMA_NAME([conz].[schema_id]))
+ '.'
+ QUOTENAME(OBJECT_NAME([conz].[referenced_object_id]))
+ ' (' + [ParentCollection].[ParentColumns]
+ ') '
+ CASE [conz].[update_referential_action]
WHEN 0 THEN '' --' ON UPDATE NO ACTION '
WHEN 1 THEN ' ON UPDATE CASCADE '
WHEN 2 THEN ' ON UPDATE SET NULL '
ELSE ' ON UPDATE SET DEFAULT '
END
+ CASE [conz].[delete_referential_action]
WHEN 0 THEN '' --' ON DELETE NO ACTION '
WHEN 1 THEN ' ON DELETE CASCADE '
WHEN 2 THEN ' ON DELETE SET NULL '
ELSE ' ON DELETE SET DEFAULT '
END
+ CASE [conz].[is_not_for_replication]
WHEN 1 THEN ' NOT FOR REPLICATION '
ELSE ''
END
+ ',' AS [Command]
FROM [sys].[foreign_keys] AS [conz]
INNER JOIN [sys].[foreign_key_columns] AS [colz]
ON [conz].[object_id] = [colz].[constraint_object_id]
INNER JOIN (--gets my child tables column names
SELECT
[conz].[name],
--technically, FK's can contain up to 16 columns, but real life is often a single column. coding here is for all columns
[ChildColumns] = STUFF((SELECT
',' + QUOTENAME([REFZ].[name])
FROM [sys].[foreign_key_columns] AS [fkcolz]
INNER JOIN [sys].[columns] AS [REFZ]
ON [fkcolz].[parent_object_id] = [REFZ].[object_id]
AND [fkcolz].[parent_column_id] = [REFZ].[column_id]
WHERE [fkcolz].[parent_object_id] = [conz].[parent_object_id]
AND [fkcolz].[constraint_object_id] = [conz].[object_id]
ORDER BY
[fkcolz].[constraint_column_id]
FOR XML PATH(''), TYPE).[value]('.','varchar(max)'),1,1,'')
FROM [sys].[foreign_keys] AS [conz]
INNER JOIN [sys].[foreign_key_columns] AS [colz]
ON [conz].[object_id] = [colz].[constraint_object_id]
WHERE [conz].[parent_object_id]= @TABLE_ID
GROUP BY
[conz].[name],
[conz].[parent_object_id],--- without GROUP BY multiple rows are returned
[conz].[object_id]
) AS [ChildCollection]
ON [conz].[name] = [ChildCollection].[name]
INNER JOIN (--gets the parent tables column names for the FK reference
SELECT
[conz].[name],
[ParentColumns] = STUFF((SELECT
',' + [REFZ].[name]
FROM [sys].[foreign_key_columns] AS [fkcolz]
INNER JOIN [sys].[columns] AS [REFZ]
ON [fkcolz].[referenced_object_id] = [REFZ].[object_id]
AND [fkcolz].[referenced_column_id] = [REFZ].[column_id]
WHERE [fkcolz].[referenced_object_id] = [conz].[referenced_object_id]
AND [fkcolz].[constraint_object_id] = [conz].[object_id]
ORDER BY [fkcolz].[constraint_column_id]
FOR XML PATH(''), TYPE).[value]('.','varchar(max)'),1,1,'')
FROM [sys].[foreign_keys] AS [conz]
INNER JOIN [sys].[foreign_key_columns] AS [colz]
ON [conz].[object_id] = [colz].[constraint_object_id]
-- AND colz.parent_column_id
GROUP BY
[conz].[name],
[conz].[referenced_object_id],--- without GROUP BY multiple rows are returned
[conz].[object_id]
) AS [ParentCollection]
ON [conz].[name] = [ParentCollection].[name]
)AS [MyAlias];
--##############################################################################
--RULES
--##############################################################################
SET @RULESCONSTSQLS = '' COLLATE SQL_Latin1_General_CP1_CI_AS;
SELECT
@RULESCONSTSQLS = @RULESCONSTSQLS
+ ISNULL(
@vbCrLf
+ 'if not exists(SELECT [name] FROM tempdb.sys.objects WHERE TYPE=''R'' AND schema_id = ' COLLATE SQL_Latin1_General_CP1_CI_AS
+ CONVERT(VARCHAR(30),[objz].[schema_id])
+ ' AND [name] = ''' COLLATE SQL_Latin1_General_CP1_CI_AS
+ QUOTENAME(OBJECT_NAME([colz].[rule_object_id]))
+ ''')' COLLATE SQL_Latin1_General_CP1_CI_AS
+ @vbCrLf
+ [MODS].[definition] + @vbCrLf
+ 'GO' COLLATE SQL_Latin1_General_CP1_CI_AS + @vbCrLf
+ 'EXEC sp_binderule ' COLLATE SQL_Latin1_General_CP1_CI_AS
+ QUOTENAME([objz].[name])
+ ', ''' COLLATE SQL_Latin1_General_CP1_CI_AS
+ QUOTENAME(OBJECT_NAME([colz].[object_id]))
+ '.' COLLATE SQL_Latin1_General_CP1_CI_AS + QUOTENAME([colz].[name])
+ '''' COLLATE SQL_Latin1_General_CP1_CI_AS
+ @vbCrLf
+ 'GO' ,'' COLLATE SQL_Latin1_General_CP1_CI_AS)
FROM [tempdb].[sys].[columns] [colz]
INNER JOIN [tempdb].[sys].[objects] [objz]
ON [objz].[object_id] = [colz].[object_id]
INNER JOIN [tempdb].[sys].[sql_modules] AS [MODS]
ON [colz].[rule_object_id] = [MODS].[object_id]
WHERE [colz].[rule_object_id] <> 0
AND [colz].[object_id] = @TABLE_ID;
--##############################################################################
--TRIGGERS
--##############################################################################
SET @TRIGGERSTATEMENT = '';
SELECT
@TRIGGERSTATEMENT = @TRIGGERSTATEMENT + @vbCrLf + [MODS].[definition] + @vbCrLf + 'GO'
FROM [tempdb].[sys].[sql_modules] AS [MODS]
WHERE [MODS].[object_id] IN(SELECT
[objz].[object_id]
FROM [tempdb].[sys].[objects] AS [objz]
WHERE [objz].[type] = 'TR'
AND [objz].[parent_object_id] = @TABLE_ID);
IF @TRIGGERSTATEMENT <> '' COLLATE SQL_Latin1_General_CP1_CI_AS
SET @TRIGGERSTATEMENT = @vbCrLf + 'GO' COLLATE SQL_Latin1_General_CP1_CI_AS + @vbCrLf + @TRIGGERSTATEMENT;
--##############################################################################
--NEW SECTION QUERY ALL EXTENDED PROPERTIES
--##############################################################################
SET @EXTENDEDPROPERTIES = '' COLLATE SQL_Latin1_General_CP1_CI_AS;
SELECT @EXTENDEDPROPERTIES =
@EXTENDEDPROPERTIES + @vbCrLf +
'EXEC tempdb.sys.sp_addextendedproperty
@name = N''' COLLATE SQL_Latin1_General_CP1_CI_AS
+ [name]
+ ''', @value = N''' COLLATE SQL_Latin1_General_CP1_CI_AS
+ REPLACE(CONVERT(VARCHAR(MAX),[value]),'''','''''') + ''',
@level0type = N''SCHEMA'', @level0name = ' COLLATE SQL_Latin1_General_CP1_CI_AS
+ QUOTENAME(@SCHEMANAME + ',
@level1type = N''TABLE'', @level1name = [' COLLATE SQL_Latin1_General_CP1_CI_AS
+ @TBLNAME)
+ '];' COLLATE SQL_Latin1_General_CP1_CI_AS
--SELECT objtype, objname, name, value
FROM [sys].[fn_listextendedproperty] (NULL, 'schema', @SCHEMANAME, 'table', @TBLNAME, NULL, NULL);
--OMacoder suggestion for column extended properties http://www.sqlservercentral.com/Forums/FindPost1651606.aspx
SELECT @EXTENDEDPROPERTIES =
@EXTENDEDPROPERTIES + @vbCrLf +
'EXEC sys.sp_addextendedproperty
@name = N''' COLLATE SQL_Latin1_General_CP1_CI_AS
+ [name]
+ ''', @value = N''' COLLATE SQL_Latin1_General_CP1_CI_AS
+ REPLACE(CONVERT(VARCHAR(MAX),[value]),'''','''''')
+ ''',
@level0type = N''SCHEMA'', @level0name = ' COLLATE SQL_Latin1_General_CP1_CI_AS
+ QUOTENAME(@SCHEMANAME) + ',
@level1type = N''TABLE'', @level1name = ' COLLATE SQL_Latin1_General_CP1_CI_AS
+ QUOTENAME(@TBLNAME) + ',
@level2type = N''COLUMN'', @level2name = ' COLLATE SQL_Latin1_General_CP1_CI_AS
+ QUOTENAME([objname]) + ';' COLLATE SQL_Latin1_General_CP1_CI_AS
--SELECT objtype, objname, name, value
FROM [sys].[fn_listextendedproperty] (NULL, 'schema', @SCHEMANAME, 'table', @TBLNAME, 'column', NULL);
IF @EXTENDEDPROPERTIES <> '' COLLATE SQL_Latin1_General_CP1_CI_AS
SET @EXTENDEDPROPERTIES = @vbCrLf + 'GO' COLLATE SQL_Latin1_General_CP1_CI_AS + @vbCrLf + @EXTENDEDPROPERTIES;
--##############################################################################
--FINAL CLEANUP AND PRESENTATION
--##############################################################################
--at this point, there is a trailing comma, or it blank
SELECT
@FINALSQL = @FINALSQL
+ @CONSTRAINTSQLS
+ @CHECKCONSTSQLS
+ @FKSQLS;
--note that this trims the trailing comma from the end of the statements
SET @FINALSQL = SUBSTRING(@FINALSQL,1,LEN(@FINALSQL) -1) ;
SET @FINALSQL = @FINALSQL + ')' COLLATE SQL_Latin1_General_CP1_CI_AS + @vbCrLf ;
SET @input = @vbCrLf
+ @FINALSQL
+ @INDEXSQLS
+ @RULESCONSTSQLS
+ @TRIGGERSTATEMENT
+ @EXTENDEDPROPERTIES;
SELECT @input AS [Item];
RETURN 0;
END; --PROC
SP DB_HELP_ExtensionTableDefExport
CREATE procedure [dbo].[DB_INFO_ExtensionTableDefExport]
AS
BEGIN
PRINT 'UNCOMMENT AND EXECUTE FOR RUNNING PROCEDURE SpAutoUpdateTemplateDoc'
/*
USE [master];
GO
IF OBJECT_ID('[dbo].[sp_GetDDL]') IS NOT NULL
DROP PROCEDURE [dbo].[sp_GetDDL];
GO
--#################################################################################################
-- Real World DBA Toolkit Version 2019-08-01 Lowell Izaguirre lowell@stormrage.com
--#################################################################################################
-- USAGE: exec sp_GetDDL GMACT
-- or exec sp_GetDDL 'bob.example'
-- or exec sp_GetDDL '[schemaname].[tablename]'
-- or exec sp_GetDDL #temp
--#################################################################################################
-- copyright 2004-2018 by Lowell Izaguirre scripts*at*stormrage.com all rights reserved.
--developer utility function added by Lowell, used in SQL Server Management Studio
-- http://www.stormrage.com/SQLStuff/sp_GetDDL_Latest.txt
--Purpose: Script Any Table, Temp Table or Object(Procedure Function Synonym View Table Trigger)
--#################################################################################################
-- see the thread here for lots of details: http://www.sqlservercentral.com/Forums/Topic751783-566-7.aspx
-- You can use this however you like...this script is not rocket science, but it took a bit of work to create.
-- the only thing that I ask
-- is that if you adapt my procedure or make it better, to simply send me a copy of it,
-- so I can learn from the things you've enhanced.The feedback you give will be what makes
-- it worthwhile to me, and will be fed back to the SQL community.
-- add this to your toolbox of helpful scripts.
--#################################################################################################
--
-- V300 uses String concatination and sys.tables instead of a cursor
-- V301 enhanced 07/31/2009 to include extended properties definitions
-- V302 fixes an issue where the schema is created , ie 'bob', but no user named 'bob' owns the schema, so the table is not found
-- V303 fixes an issue where all rules are appearing, instead of jsut the rule related to a column
-- V304 testing whether vbCrLf is better than just CHAR(13), some formatting cleanup with GO statements
-- also fixed an issue with the conversion from syscolumns to sys.columns, max-length is only field we need, not [precision]
-- V305 user feedback helped me find that the type_name function should call user_type_id instead of system_type_id
-- also fixed issue where identity definition missing from numeric/decimal definition
-- V306 fixes the computed columns definition that got broken/removed somehow in V300
-- also formatting when decimal is not an identity
-- V307 fixes bug identified by David Griffiths-491597 from SSC where the @TABLE_ID
-- is reselected, but without it's schema , potentially selecting the wrong table
-- also fixed is the missing size definition for varbinary, also found by David Griffith
-- V308 abtracted all SQLs to use Table Alaises
-- added logic to script a temp table.
-- added warning about possibly not being marked as system object.
-- V309 added logic based on feedback from Vincent Wylenzek @SSC to return the definition from sys.sql_modules for
-- any object like procedure/view/function/trigger, and not just a table.
-- note previously, if you pointed sp_GetDDL at a view, it returned the view definition as a table...
-- now it will return the view definition instead.
-- V309a returns multi row recordset, one line per record
-- V310a fixed the commented out code related to collation identified by moadh.bs @SSC
-- changed the DEFAULT definitions to not include the default name.
-- V310b Added PERSISTED to calculated columns where applicable
-- V310b fixed COLLATE statement for temp tables
-- V310c fixed NVARCHAR size misreported as doubled.
-- V311 fixed issue where indexes did not identify if the column was ASC or DESC found by nikus @ SSC
-- V311a fixed issue where indexes did not identify if the index was CLUSTERED or NONCLUSTERED found by nikus @ SSC 02/22/2013
-- V312 got rid of all upper casing, and allowing all scripts to generate the exact object names in cases of case sensitive databases.
-- now using the case sensitive name of the table passed: so of you did 'exec sp_GetDDL invoicedocs , it might return the script for InvoiceDocs, as that is how it is spelled in sys.objects.
-- added if exists(drop table/procedure/function) statement to the scripting automatically.
-- toggled the commented out code to list any default constraints by name, hopefully to be more accurate..
-- formatting of index statements to be multi line for better readability
--V314 03/30/2015
-- did i mention this scripts out temp tables too? sp_GetDDL #tmp
-- scripts any object:table,#temptable procedure, function, view or trigger
-- added ability to script synonyms
-- moved logic for REAL datatype to fix error when scripting real columns
-- added OmaCoders suggestion to script column extended properties as well.
-- added matt_slack suggestion to script schemaname as part of index portion of script.
-- minor script cleanup to use QUOTENAME insead of concatenating square brackets.
-- changed compatibility to 2008 and above only, now filtered idnexes with WHERE statmeents script correctly
-- foreign key tables and columns in script now quotenamed to account for spaces in names; previously an error for Applciation ID instead of [Application ID]
--V315 Fixes Aliases and column names that prevented Case Sensitive collations from working.
-- Adds code if the procedure scripted is a system object
-- index scripts featuring filtered indexes is now included
-- index scripts now include filegroup name and compression settings
-- foreign key casecade delete/update settings now included as identified by Alberto aserio@SSC)
-- Fixes related to scripting extended events as identified by Alberto aserio@SSC)
--V316 Fixes Identified 07/27/2016 by mlm( m.martinelli@SSC)
-- Added logic resolving error when custom data type are defined using name greather than 16 char.
-- Added handling for data types: binary, datetime2, datetimeoffset, time
-- Added Set Based logic for Handling Fixed FOREIGN KEYS handling when one foreign key is define on more then one field
-- Added SPARSE column property
--V317 Fixes Identified 03/30/2017 by Lowell
-- Scripting of Foreign key column(s) are now quotenamed
-- Scripting column store indexes was broken, now fixed for column store indexes
--V318 Fixes Identified 02/14/2018 by Lowell
-- Scripting of with collation added/required for scripting SharePoint/ReportServer , or databases with non standard collations
-- Scripting enhanced to definitively handle case sensitive collations as well.
--V319 Adding logic for Temporal Tables, to grab their auto nistory tables
-- first attempt for partitioned tables, to get the columns correctly on the partition scheme
-- DROP PROCEDURE [dbo].[sp_GetDDL]
--#############################################################################
--if you are going to put this in MASTER, and want it to be able to query
--each database's sys.indexes, you MUST mark it as a system procedure:
--EXECUTE sp_ms_marksystemobject 'sp_GetDDL'
--#############################################################################
CREATE PROCEDURE [dbo].[sp_GetDDL]
@TBL VARCHAR(255)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @TBLNAME VARCHAR(200),
@SCHEMANAME VARCHAR(255),
@STRINGLEN INT,
@TABLE_ID INT,
@FINALSQL VARCHAR(MAX),
@CONSTRAINTSQLS VARCHAR(MAX),
@CHECKCONSTSQLS VARCHAR(MAX),
@RULESCONSTSQLS VARCHAR(MAX),
@FKSQLS VARCHAR(MAX),
@TRIGGERSTATEMENT VARCHAR(MAX),
@EXTENDEDPROPERTIES VARCHAR(MAX),
@INDEXSQLS VARCHAR(MAX),
@MARKSYSTEMOBJECT VARCHAR(MAX),
@vbCrLf CHAR(2),
@ISSYSTEMOBJECT INT,
@PROCNAME VARCHAR(256),
@input VARCHAR(MAX),
@ObjectTypeFound VARCHAR(255),
@ObjectDataTypeLen INT,
--V3.20 additions
@WithStatement VARCHAR(MAX),
@FileGroupStatement VARCHAR(MAX),
@PartitioningStatement VARCHAR(MAX),
@TemporalStatement VARCHAR(MAX);
--##############################################################################
-- INITIALIZE
--##############################################################################
SET @input = '';
--new code: determine whether this proc is marked as a system proc with sp_ms_marksystemobject,
--which flips the is_ms_shipped bit in sys.objects
SELECT @ISSYSTEMOBJECT = ISNULL([is_ms_shipped],0),@PROCNAME = ISNULL([name],'sp_GetDDL') FROM [sys].[objects] WHERE [object_id] = @@PROCID;
IF @ISSYSTEMOBJECT IS NULL
SELECT @ISSYSTEMOBJECT = ISNULL([is_ms_shipped],0),@PROCNAME = ISNULL([name],'sp_GetDDL') FROM [master].[sys].[objects] WHERE [object_id] = @@PROCID;
IF @ISSYSTEMOBJECT IS NULL
SET @ISSYSTEMOBJECT = 0;
IF @PROCNAME IS NULL
SET @PROCNAME = 'sp_GetDDL';
--SET @TBL = '[DBO].[WHATEVER1]'
--does the tablename contain a schema?
SET @vbCrLf = CHAR(10);
SELECT @SCHEMANAME = ISNULL(PARSENAME(@TBL,2),'dbo') ,
@TBLNAME = PARSENAME(@TBL,1);
SELECT
@TBLNAME = [objz].[name],
@TABLE_ID = [objz].[object_id]
FROM [sys].[objects] AS [objz]
WHERE [objz].[type] IN ('S','U')
AND [objz].[name] <> 'dtproperties'
AND [objz].[name] = @TBLNAME
AND [objz].[schema_id] = SCHEMA_ID(@SCHEMANAME) ;
SELECT @ObjectDataTypeLen = MAX(LEN([name])) FROM [sys].[types];
--##############################################################################
-- Check If TEMP TableName is Valid
--##############################################################################
IF LEFT(@TBLNAME,1) = '#' COLLATE SQL_Latin1_General_CP1_CI_AS
BEGIN
PRINT '--TEMP TABLE ' + QUOTENAME(@TBLNAME) + ' FOUND';
IF OBJECT_ID('tempdb..' + QUOTENAME(@TBLNAME)) IS NOT NULL
BEGIN
PRINT '--GOIN TO TEMP PROCESSING';
GOTO TEMPPROCESS;
END;
END;
ELSE
BEGIN
PRINT '--Non-Temp Table, ' + QUOTENAME(@TBLNAME) + ' continue Processing';
END;
--##############################################################################
-- Check If TableName is Valid
--##############################################################################
IF ISNULL(@TABLE_ID,0) = 0
BEGIN
--V309 code: see if it is an object and not a table.
SELECT
@TBLNAME = [objz].[name],
@TABLE_ID = [objz].[object_id],
@ObjectTypeFound = [objz].[type_desc]
FROM [sys].[objects] AS [objz]
--WHERE [type_desc] IN('SQL_STORED_PROCEDURE','VIEW','SQL_TRIGGER','AGGREGATE_FUNCTION','SQL_INLINE_TABLE_VALUED_FUNCTION','SQL_TABLE_VALUED_FUNCTION','SQL_SCALAR_FUNCTION','SYNONYMN')
WHERE [objz].[type] IN ('P','V','TR','AF','IF','FN','TF','SN')
AND [objz].[name] <> 'dtproperties'
AND [objz].[name] = @TBLNAME
AND [objz].[schema_id] = SCHEMA_ID(@SCHEMANAME) ;
IF ISNULL(@TABLE_ID,0) <> 0
BEGIN
--adding a drop statement.
--adding a sp_ms_marksystemobject if needed
SELECT @MARKSYSTEMOBJECT = CASE
WHEN [objz].[is_ms_shipped] = 1
THEN '
GO
--#################################################################################################
--Mark as a system object
EXECUTE sp_ms_marksystemobject ''' + QUOTENAME(@SCHEMANAME) +'.' + QUOTENAME(@TBLNAME) + '''
--#################################################################################################
'
ELSE '
GO
'
END
FROM [sys].[objects] AS [objz]
WHERE [objz].[object_id] = @TABLE_ID;
--adding a drop statement.
IF @ObjectTypeFound = 'SYNONYM' COLLATE SQL_Latin1_General_CP1_CI_AS
BEGIN
SELECT @FINALSQL =
'IF EXISTS(SELECT * FROM sys.synonyms WHERE name = '''
+ [name]
+ ''''
+ ' AND base_object_name <> ''' + [base_object_name] + ''')'
+ @vbCrLf
+ ' DROP SYNONYM ' + QUOTENAME([name]) + ''
+ @vbCrLf
+'GO'
+ @vbCrLf
+'IF NOT EXISTS(SELECT * FROM sys.synonyms WHERE name = '''
+ [name]
+ ''')'
+ @vbCrLf
+ 'CREATE SYNONYM ' + QUOTENAME([name]) + ' FOR ' + [base_object_name] +';'
FROM [sys].[synonyms]
WHERE [name] = @TBLNAME
AND [schema_id] = SCHEMA_ID(@SCHEMANAME);
END;
ELSE
BEGIN
SELECT @FINALSQL =
'IF OBJECT_ID(''' + QUOTENAME(@SCHEMANAME) + '.' + QUOTENAME(@TBLNAME) + ''') IS NOT NULL ' + @vbCrLf
+ 'DROP ' + CASE
WHEN [objz].[type] IN ('P')
THEN ' PROCEDURE '
WHEN [objz].[type] IN ('V')
THEN ' VIEW '
WHEN [objz].[type] IN ('TR')
THEN ' TRIGGER '
ELSE ' FUNCTION '
END
+ QUOTENAME(@SCHEMANAME) + '.' + QUOTENAME(@TBLNAME) + ' ' + @vbCrLf + 'GO' + @vbCrLf
+ [def].[definition] + @MARKSYSTEMOBJECT
FROM [sys].[objects] AS [objz]
INNER JOIN [sys].[sql_modules] AS [def]
ON [objz].[object_id] = [def].[object_id]
WHERE [objz].[type] IN ('P','V','TR','AF','IF','FN','TF')
AND [objz].[name] <> 'dtproperties'
AND [objz].[name] = @TBLNAME
AND [objz].[schema_id] = SCHEMA_ID(@SCHEMANAME) ;
END;
SET @input = @FINALSQL;
SELECT @input AS [Item];
RETURN;
END;
ELSE
BEGIN
SET @FINALSQL = 'Object ' + QUOTENAME(@SCHEMANAME) + '.' + QUOTENAME(@TBLNAME) + ' does not exist in Database ' + QUOTENAME(DB_NAME()) + ' '
+ CASE
WHEN @ISSYSTEMOBJECT = 0 THEN @vbCrLf + ' (also note that ' + @PROCNAME + ' is not marked as a system proc and cross db access to sys.tables will fail.)'
ELSE ''
END;
IF LEFT(@TBLNAME,1) = '#'
SET @FINALSQL = @FINALSQL + ' OR in The tempdb database.';
SELECT @FINALSQL AS [Item];
RETURN 0;
END;
END;
--##############################################################################
-- Valid Table, Continue Processing
--##############################################################################
--Is this a SYSTEM versioned TABLE?
SELECT @FINALSQL =
CASE
WHEN [tabz].[history_table_id] IS NULL
THEN ''
ELSE 'ALTER TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME([tabz].[object_id]) ) + '.' + QUOTENAME(OBJECT_NAME([tabz].[object_id])) + ' SET (SYSTEM_VERSIONING = OFF);' + @vbCrLf
+ 'IF OBJECT_ID(''' + QUOTENAME(OBJECT_SCHEMA_NAME([tabz].[history_table_id]) ) + '.' + QUOTENAME(OBJECT_NAME([tabz].[history_table_id])) + ''') IS NOT NULL ' + @vbCrLf
+ 'DROP TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME([tabz].[history_table_id])) + '.' + QUOTENAME(OBJECT_NAME([tabz].[history_table_id])) + ' ' + @vbCrLf + 'GO' + @vbCrLf
END
+ 'IF OBJECT_ID(''' + QUOTENAME(OBJECT_SCHEMA_NAME([tabz].[object_id]) ) + '.' + QUOTENAME(OBJECT_NAME([tabz].[object_id])) + ''') IS NOT NULL ' + @vbCrLf
+ 'DROP TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME([tabz].[object_id])) + '.' + QUOTENAME(OBJECT_NAME([tabz].[object_id])) + ' ' + @vbCrLf + 'GO' + @vbCrLf
+ 'CREATE TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME([tabz].[object_id])) + '.' + QUOTENAME(OBJECT_NAME([tabz].[object_id])) + ' ( '
FROM [sys].[tables] [tabz] WHERE [tabz].[object_id] = @TABLE_ID
PRINT @FINALSQL
--removed invalid code here which potentially selected wrong table--thanks David Grifiths @SSC!
SELECT
@STRINGLEN = MAX(LEN([colz].[name])) + 1
FROM [sys].[objects] AS [objz]
INNER JOIN [sys].[columns] AS [colz]
ON [objz].[object_id] = [colz].[object_id]
AND [objz].[object_id] = @TABLE_ID;
--##############################################################################
--Get the columns, their definitions and defaults.
--##############################################################################
SELECT
@FINALSQL = @FINALSQL
+ CASE
WHEN [colz].[is_computed] = 1
THEN @vbCrLf
+ QUOTENAME([colz].[name])
+ ' '
+ SPACE(@STRINGLEN - LEN([colz].[name]))
+ 'AS ' + ISNULL([CALC].[definition],'')
+ CASE
WHEN [CALC].[is_persisted] = 1
THEN ' PERSISTED'
ELSE ''
END
ELSE @vbCrLf
+ QUOTENAME([colz].[name])
+ ' '
+ SPACE(@STRINGLEN - LEN([colz].[name]))
+ UPPER(TYPE_NAME([colz].[user_type_id]))
+ CASE
-- data types with precision and scale IE DECIMAL(18,3), NUMERIC(10,2)
WHEN TYPE_NAME([colz].[user_type_id]) IN ('decimal','numeric')
THEN '('
+ CONVERT(VARCHAR,[colz].[precision])
+ ','
+ CONVERT(VARCHAR,[colz].[scale])
+ ') '
+ SPACE(6 - LEN(CONVERT(VARCHAR,[colz].[precision])
+ ','
+ CONVERT(VARCHAR,[colz].[scale])))
+ SPACE(7)
+ SPACE(@ObjectDataTypeLen - LEN(TYPE_NAME([colz].[user_type_id])))
+ CASE
WHEN COLUMNPROPERTY ( @TABLE_ID , [colz].[name] , 'IsIdentity' ) = 0
THEN ''
ELSE ' IDENTITY('
+ CONVERT(VARCHAR,ISNULL(IDENT_SEED(@TBLNAME),1) )
+ ','
+ CONVERT(VARCHAR,ISNULL(IDENT_INCR(@TBLNAME),1) )
+ ')'
END
+ CASE WHEN [colz].[is_sparse] = 1 THEN ' sparse' ELSE ' ' END
+ CASE
WHEN [colz].[is_nullable] = 0
THEN ' NOT NULL'
ELSE ' NULL'
END
-- data types with scale IE datetime2(7),TIME(7)
WHEN TYPE_NAME([colz].[user_type_id]) IN ('datetime2','datetimeoffset','time')
THEN CASE
WHEN [colz].[scale] < 7 THEN
'('
+ CONVERT(VARCHAR,[colz].[scale])
+ ') '
ELSE
' '
END
+ SPACE(4)
+ SPACE(@ObjectDataTypeLen - LEN(TYPE_NAME([colz].[user_type_id])))
+ ' '
+ CASE WHEN [colz].[is_sparse] = 1 THEN ' sparse' ELSE ' ' END
+ CASE [colz].[generated_always_type]
WHEN 0 THEN ''
WHEN 1 THEN ' GENERATED ALWAYS AS ROW START'
WHEN 2 THEN ' GENERATED ALWAYS AS ROW END'
ELSE ''
END
+ CASE WHEN [colz].[is_hidden] = 1 THEN ' HIDDEN' ELSE '' END
+ CASE
WHEN [colz].[is_nullable] = 0
THEN ' NOT NULL'
ELSE ' NULL'
END
--data types with no/precision/scale,IE FLOAT
WHEN TYPE_NAME([colz].[user_type_id]) IN ('float') --,'real')
THEN
--addition: if 53, no need to specifically say (53), otherwise display it
CASE
WHEN [colz].[precision] = 53
THEN SPACE(11 - LEN(CONVERT(VARCHAR,[colz].[precision])))
+ SPACE(7)
+ SPACE(@ObjectDataTypeLen - LEN(TYPE_NAME([colz].[user_type_id])))
+ CASE WHEN [colz].[is_sparse] = 1 THEN ' sparse' ELSE ' ' END
+ CASE
WHEN [colz].[is_nullable] = 0
THEN ' NOT NULL'
ELSE ' NULL'
END
ELSE '('
+ CONVERT(VARCHAR,[colz].[precision])
+ ') '
+ SPACE(6 - LEN(CONVERT(VARCHAR,[colz].[precision])))
+ SPACE(7) + SPACE(@ObjectDataTypeLen - LEN(TYPE_NAME([colz].[user_type_id])))
+ CASE WHEN [colz].[is_sparse] = 1 THEN ' sparse' ELSE ' ' END
+ CASE
WHEN [colz].[is_nullable] = 0
THEN ' NOT NULL'
ELSE ' NULL'
END
END
--data type with max_length ie CHAR (44), VARCHAR(40), BINARY(5000),
--##############################################################################
-- COLLATE STATEMENTS
-- personally i do not like collation statements,
-- but included here to make it easy on those who do
--##############################################################################
WHEN TYPE_NAME([colz].[user_type_id]) IN ('char','varchar','binary','varbinary')
THEN CASE
WHEN [colz].[max_length] = -1
THEN '(max)'
+ SPACE(6 - LEN(CONVERT(VARCHAR,[colz].[max_length])))
+ SPACE(7) + SPACE(@ObjectDataTypeLen - LEN(TYPE_NAME([colz].[user_type_id])))
----collate to comment out when not desired
--+ CASE
-- WHEN COLS.collation_name IS NULL
-- THEN ''
-- ELSE ' COLLATE ' + COLS.collation_name
-- END
+ CASE WHEN [colz].[is_sparse] = 1 THEN ' sparse' ELSE ' ' END
+ CASE
WHEN [colz].[is_nullable] = 0
THEN ' NOT NULL'
ELSE ' NULL'
END
ELSE '('
+ CONVERT(VARCHAR,[colz].[max_length])
+ ') '
+ SPACE(6 - LEN(CONVERT(VARCHAR,[colz].[max_length])))
+ SPACE(7) + SPACE(@ObjectDataTypeLen - LEN(TYPE_NAME([colz].[user_type_id])))
----collate to comment out when not desired
--+ CASE
-- WHEN COLS.collation_name IS NULL
-- THEN ''
-- ELSE ' COLLATE ' + COLS.collation_name
-- END
+ CASE WHEN [colz].[is_sparse] = 1 THEN ' sparse' ELSE ' ' END
+ CASE
WHEN [colz].[is_nullable] = 0
THEN ' NOT NULL'
ELSE ' NULL'
END
END
--data type with max_length ( BUT DOUBLED) ie NCHAR(33), NVARCHAR(40)
WHEN TYPE_NAME([colz].[user_type_id]) IN ('nchar','nvarchar')
THEN CASE
WHEN [colz].[max_length] = -1
THEN '(max)'
+ SPACE(5 - LEN(CONVERT(VARCHAR,([colz].[max_length] / 2))))
+ SPACE(7)
+ SPACE(@ObjectDataTypeLen - LEN(TYPE_NAME([colz].[user_type_id])))
----collate to comment out when not desired
--+ CASE
-- WHEN COLS.collation_name IS NULL
-- THEN ''
-- ELSE ' COLLATE ' + COLS.collation_name
-- END
+ CASE WHEN [colz].[is_sparse] = 1 THEN ' sparse' ELSE ' ' END
+ CASE
WHEN [colz].[is_nullable] = 0
THEN ' NOT NULL'
ELSE ' NULL'
END
ELSE '('
+ CONVERT(VARCHAR,([colz].[max_length] / 2))
+ ') '
+ SPACE(6 - LEN(CONVERT(VARCHAR,([colz].[max_length] / 2))))
+ SPACE(7)
+ SPACE(@ObjectDataTypeLen - LEN(TYPE_NAME([colz].[user_type_id])))
----collate to comment out when not desired
--+ CASE
-- WHEN COLS.collation_name IS NULL
-- THEN ''
-- ELSE ' COLLATE ' + COLS.collation_name
-- END
+ CASE WHEN [colz].[is_sparse] = 1 THEN ' sparse' ELSE ' ' END
+ CASE
WHEN [colz].[is_nullable] = 0
THEN ' NOT NULL'
ELSE ' NULL'
END
END
WHEN TYPE_NAME([colz].[user_type_id]) IN ('datetime','money','text','image','real')
THEN SPACE(18 - LEN(TYPE_NAME([colz].[user_type_id])))
+ ' '
+ CASE WHEN [colz].[is_sparse] = 1 THEN ' sparse' ELSE ' ' END
+ CASE
WHEN [colz].[is_nullable] = 0
THEN ' NOT NULL'
ELSE ' NULL'
END
-- other data type IE INT, DATETIME, MONEY, CUSTOM DATA TYPE,...
ELSE SPACE(@ObjectDataTypeLen - LEN(TYPE_NAME([colz].[user_type_id])))
+ CASE
WHEN COLUMNPROPERTY ( @TABLE_ID , [colz].[name] , 'IsIdentity' ) = 0
THEN ' '
ELSE ' IDENTITY('
+ CONVERT(VARCHAR,ISNULL(IDENT_SEED(@TBLNAME),1) )
+ ','
+ CONVERT(VARCHAR,ISNULL(IDENT_INCR(@TBLNAME),1) )
+ ')'
END
+ SPACE(2)
+ CASE WHEN [colz].[is_sparse] = 1 THEN ' sparse' ELSE ' ' END
+ CASE
WHEN [colz].[is_nullable] = 0
THEN ' NOT NULL'
ELSE ' NULL'
END
END
+ CASE
WHEN [colz].[default_object_id] = 0
THEN ''
--ELSE ' DEFAULT ' + ISNULL(def.[definition] ,'')
--optional section in case NAMED default constraints are needed:
ELSE ' CONSTRAINT ' + QUOTENAME([DEF].[name]) + ' DEFAULT ' + ISNULL([DEF].[definition] ,'')
--i thought it needed to be handled differently! NOT!
END --CASE cdefault
END --iscomputed
+ ','
FROM [sys].[columns] AS [colz]
LEFT OUTER JOIN [sys].[default_constraints] AS [DEF]
ON [colz].[default_object_id] = [DEF].[object_id]
LEFT OUTER JOIN [sys].[computed_columns] AS [CALC]
ON [colz].[object_id] = [CALC].[object_id]
AND [colz].[column_id] = [CALC].[column_id]
WHERE [colz].[object_id]=@TABLE_ID
ORDER BY [colz].[column_id];
--##############################################################################
--used for formatting the rest of the constraints:
--##############################################################################
SELECT
@STRINGLEN = MAX(LEN([objz].[name])) + 1
FROM [sys].[objects] AS [objz];
--##############################################################################
--PK/Unique Constraints and Indexes, using the 2005/08 INCLUDE syntax
--##############################################################################
DECLARE @Results TABLE (
[SCHEMA_ID] INT,
[SCHEMA_NAME] VARCHAR(255),
[OBJECT_ID] INT,
[OBJECT_NAME] VARCHAR(255),
[index_id] INT,
[index_name] VARCHAR(255),
[ROWS] BIGINT,
[SizeMB] DECIMAL(19,3),
[IndexDepth] INT,
[TYPE] INT,
[type_desc] VARCHAR(30),
[fill_factor] INT,
[is_unique] INT,
[is_primary_key] INT ,
[is_unique_constraint] INT,
[index_columns_key] VARCHAR(MAX),
[index_columns_include] VARCHAR(MAX),
[has_filter] BIT ,
[filter_definition] VARCHAR(MAX),
[currentFilegroupName] VARCHAR(128),
[CurrentCompression] VARCHAR(128));
INSERT INTO @Results
SELECT
[SCH].[schema_id], [SCH].[name] AS [SCHEMA_NAME],
[objz].[object_id], [objz].[name] AS [OBJECT_NAME],
[IDX].[index_id], ISNULL([IDX].[name], '---') AS [index_name],
[partitions].[ROWS], [partitions].[SizeMB], INDEXPROPERTY([objz].[object_id], [IDX].[name], 'IndexDepth') AS [IndexDepth],
[IDX].[type], [IDX].[type_desc], [IDX].[fill_factor],
[IDX].[is_unique], [IDX].[is_primary_key], [IDX].[is_unique_constraint],
ISNULL([Index_Columns].[index_columns_key], '---') AS [index_columns_key],
ISNULL([Index_Columns].[index_columns_include], '---') AS [index_columns_include],
[IDX].[has_filter],
[IDX].[filter_definition],
[filz].[name],
ISNULL([p].[data_compression_desc],'')
FROM [sys].[objects] AS [objz]
INNER JOIN [sys].[schemas] AS [SCH] ON [objz].[schema_id]=[SCH].[schema_id]
INNER JOIN [sys].[indexes] AS [IDX] ON [objz].[object_id]=[IDX].[object_id]
INNER JOIN [sys].[filegroups] AS [filz] ON [IDX].[data_space_id] = [filz].[data_space_id]
INNER JOIN [sys].[partitions] AS [p] ON [IDX].[object_id] = [p].[object_id] AND [IDX].[index_id] = [p].[index_id]
INNER JOIN (
SELECT
[statz].[object_id], [statz].[index_id], SUM([statz].[row_count]) AS [ROWS],
CONVERT(NUMERIC(19,3), CONVERT(NUMERIC(19,3), SUM([statz].[in_row_reserved_page_count]+[statz].[lob_reserved_page_count]+[statz].[row_overflow_reserved_page_count]))/CONVERT(NUMERIC(19,3), 128)) AS [SizeMB]
FROM [sys].[dm_db_partition_stats] AS [statz]
GROUP BY [statz].[object_id], [statz].[index_id]
) AS [partitions]
ON [IDX].[object_id]=[partitions].[object_id]
AND [IDX].[index_id]=[partitions].[index_id]
CROSS APPLY (
SELECT
LEFT([Index_Columns].[index_columns_key], LEN([Index_Columns].[index_columns_key])-1) AS [index_columns_key],
LEFT([Index_Columns].[index_columns_include], LEN([Index_Columns].[index_columns_include])-1) AS [index_columns_include]
FROM
(
SELECT
(
SELECT QUOTENAME([colz].[name]) + CASE WHEN [IXCOLS].[is_descending_key] = 0 THEN ' asc' ELSE ' desc' END + ',' + ' '
FROM [sys].[index_columns] AS [IXCOLS]
INNER JOIN [sys].[columns] AS [colz]
ON [IXCOLS].[column_id] = [colz].[column_id]
AND [IXCOLS].[object_id] = [colz].[object_id]
WHERE [IXCOLS].[is_included_column] = 0
AND [IDX].[object_id] = [IXCOLS].[object_id]
AND [IDX].[index_id] = [IXCOLS].[index_id]
ORDER BY [IXCOLS].[key_ordinal]
FOR XML PATH('')
) AS [index_columns_key],
(
SELECT QUOTENAME([colz].[name]) + ',' + ' '
FROM [sys].[index_columns] AS [IXCOLS]
INNER JOIN [sys].[columns] AS [colz]
ON [IXCOLS].[column_id] = [colz].[column_id]
AND [IXCOLS].[object_id] = [colz].[object_id]
WHERE [IXCOLS].[is_included_column] = 1
AND [IDX].[object_id] = [IXCOLS].[object_id]
AND [IDX].[index_id] = [IXCOLS].[index_id]
ORDER BY [IXCOLS].[index_column_id]
FOR XML PATH('')
) AS [index_columns_include]
) AS [Index_Columns]
) AS [Index_Columns]
WHERE [SCH].[name] LIKE CASE
WHEN @SCHEMANAME = '' COLLATE SQL_Latin1_General_CP1_CI_AS
THEN [SCH].[name]
ELSE @SCHEMANAME
END
AND [objz].[name] LIKE CASE
WHEN @TBLNAME = '' COLLATE SQL_Latin1_General_CP1_CI_AS
THEN [objz].[name]
ELSE @TBLNAME
END
ORDER BY
[SCH].[name],
[objz].[name],
[IDX].[name];
--@Results table has both PK,s Uniques and indexes in thme...pull them out for adding to funal results:
SET @CONSTRAINTSQLS = '';
SET @INDEXSQLS = '';
SET @TemporalStatement = '';
SET @WithStatement = '';
--##############################################################################
-- Temporal tables
--##############################################################################
SELECT @TemporalStatement = ISNULL(@vbCrLf + 'PERIOD FOR SYSTEM_TIME ('
+ MAX(CASE WHEN [colz].[generated_always_type] = 1 THEN [colz].[name] ELSE '' END)
+','
+ MAX(CASE WHEN [colz].[generated_always_type] = 2 THEN [colz].[name] ELSE '' END)
+'),','') ,
@WithStatement = ISNULL(' SYSTEM_VERSIONING = ON (HISTORY_TABLE=' + QUOTENAME(OBJECT_SCHEMA_NAME([objz].[history_table_id])) + '.' + QUOTENAME(OBJECT_NAME([objz].[history_table_id])) + '),' ,'')
FROM [sys].[tables] [objz]
INNER JOIN [sys].[columns] [colz]
ON [objz].[object_id] = [colz].[object_id]
WHERE [colz].[object_id] = @TABLE_ID
AND [colz].[generated_always_type] > 0
GROUP BY [colz].[object_id],[objz].[history_table_id]
--##############################################################################
-- memory optimized
--##############################################################################
SELECT @WithStatement = @WithStatement + ISNULL('MEMORY_OPTIMIZED=ON, DURABILITY=' + [objz].[durability_desc] + ',','')
FROM [sys].[tables] [objz]
WHERE [objz].[is_memory_optimized] =1
AND [objz].[object_id] = @TABLE_ID
--##############################################################################
--constraints
--column store indexes are different: the "include" columns for normal indexes as scripted above are the columnstores indexed columns
--add a CASE for that situation.
--##############################################################################
SELECT @CONSTRAINTSQLS = @CONSTRAINTSQLS
+ CASE
WHEN [is_primary_key] = 1 OR [is_unique] = 1
THEN @vbCrLf
+ 'CONSTRAINT ' COLLATE SQL_Latin1_General_CP1_CI_AS + QUOTENAME([index_name]) + ' '
+ CASE
WHEN [is_primary_key] = 1
THEN ' PRIMARY KEY '
ELSE CASE
WHEN [is_unique] = 1
THEN ' UNIQUE '
ELSE ''
END
END
+ [type_desc]
+ CASE
WHEN [type_desc]='NONCLUSTERED'
THEN ''
ELSE ' '
END
+ ' (' + [index_columns_key] + ')'
+ CASE
WHEN [index_columns_include] <> '---'
THEN ' INCLUDE (' + [index_columns_include] + ')'
ELSE ''
END
+ CASE
WHEN [has_filter] = 1
THEN ' ' + [filter_definition]
ELSE ' '
END
+ CASE WHEN [fill_factor] <> 0 OR [CurrentCompression] <> 'NONE'
THEN ' WITH (' + CASE
WHEN [fill_factor] <> 0
THEN 'FILLFACTOR = ' + CONVERT(VARCHAR(30),[fill_factor])
ELSE ''
END
+ CASE
WHEN [fill_factor] <> 0 AND [CurrentCompression] <> 'NONE' THEN ',DATA_COMPRESSION = ' + [CurrentCompression] + ' '
WHEN [fill_factor] <> 0 AND [CurrentCompression] = 'NONE' THEN ''
WHEN [fill_factor] = 0 AND [CurrentCompression] <> 'NONE' THEN 'DATA_COMPRESSION = ' + [CurrentCompression] + ' '
ELSE ''
END
+ ')'
ELSE ''
END
ELSE ''
END + ','
FROM @Results
WHERE [type_desc] != 'HEAP'
AND [is_primary_key] = 1
OR [is_unique] = 1
ORDER BY
[is_primary_key] DESC,
[is_unique] DESC;
--
--##############################################################################
--indexes
--##############################################################################
SELECT @INDEXSQLS = @INDEXSQLS
+ CASE
WHEN [is_primary_key] = 0 OR [is_unique] = 0
THEN @vbCrLf
+ 'CREATE ' COLLATE SQL_Latin1_General_CP1_CI_AS + [type_desc] + ' INDEX ' COLLATE SQL_Latin1_General_CP1_CI_AS + QUOTENAME([index_name]) + ' '
+ @vbCrLf
+ ' ON ' COLLATE SQL_Latin1_General_CP1_CI_AS
+ QUOTENAME([SCHEMA_NAME]) + '.' + QUOTENAME([OBJECT_NAME])
+ CASE
WHEN [CurrentCompression] = 'COLUMNSTORE' COLLATE SQL_Latin1_General_CP1_CI_AS
THEN ' (' + [index_columns_include] + ')'
ELSE ' (' + [index_columns_key] + ')'
END
+ CASE
WHEN [CurrentCompression] = 'COLUMNSTORE' COLLATE SQL_Latin1_General_CP1_CI_AS
THEN '' COLLATE SQL_Latin1_General_CP1_CI_AS
ELSE
CASE
WHEN [index_columns_include] <> '---'
THEN @vbCrLf + ' INCLUDE (' COLLATE SQL_Latin1_General_CP1_CI_AS + [index_columns_include] + ')' COLLATE SQL_Latin1_General_CP1_CI_AS
ELSE '' COLLATE SQL_Latin1_General_CP1_CI_AS
END
END
--2008 filtered indexes syntax
+ CASE
WHEN [has_filter] = 1
THEN @vbCrLf + ' WHERE ' COLLATE SQL_Latin1_General_CP1_CI_AS + [filter_definition]
ELSE ''
END
+ CASE WHEN [fill_factor] <> 0 OR [CurrentCompression] <> 'NONE' COLLATE SQL_Latin1_General_CP1_CI_AS
THEN ' WITH (' COLLATE SQL_Latin1_General_CP1_CI_AS + CASE
WHEN [fill_factor] <> 0
THEN 'FILLFACTOR = ' COLLATE SQL_Latin1_General_CP1_CI_AS + CONVERT(VARCHAR(30),[fill_factor])
ELSE ''
END
+ CASE
WHEN [fill_factor] <> 0 AND [CurrentCompression] <> 'NONE' THEN ',DATA_COMPRESSION = ' + [CurrentCompression]+' '
WHEN [fill_factor] <> 0 AND [CurrentCompression] = 'NONE' THEN ''
WHEN [fill_factor] = 0 AND [CurrentCompression] <> 'NONE' THEN 'DATA_COMPRESSION = ' + [CurrentCompression]+' '
ELSE ''
END
+ ')'
ELSE ''
END
END
FROM @Results
WHERE [type_desc] != 'HEAP'
AND [is_primary_key] = 0
AND [is_unique] = 0
ORDER BY
[is_primary_key] DESC,
[is_unique] DESC;
IF @INDEXSQLS <> '' COLLATE SQL_Latin1_General_CP1_CI_AS
SET @INDEXSQLS = @vbCrLf + 'GO' COLLATE SQL_Latin1_General_CP1_CI_AS + @vbCrLf + @INDEXSQLS;
--##############################################################################
--CHECK Constraints
--##############################################################################
SET @CHECKCONSTSQLS = '' COLLATE SQL_Latin1_General_CP1_CI_AS;
SELECT
@CHECKCONSTSQLS = @CHECKCONSTSQLS
+ @vbCrLf
+ ISNULL('CONSTRAINT ' + QUOTENAME([objz].[name]) + ' '
+ SPACE(@STRINGLEN - LEN([objz].[name]))
+ ' CHECK ' + ISNULL([CHECKS].[definition],'')
+ ',','')
FROM [sys].[objects] AS [objz]
INNER JOIN [sys].[check_constraints] AS [CHECKS] ON [objz].[object_id] = [CHECKS].[object_id]
WHERE [objz].[type] = 'C'
AND [objz].[parent_object_id] = @TABLE_ID;
--##############################################################################
--FOREIGN KEYS
--##############################################################################
SET @FKSQLS = '' ;
SELECT
@FKSQLS=@FKSQLS
+ @vbCrLf + [MyAlias].[Command] FROM
(
SELECT
DISTINCT
--FK must be added AFTER the PK/unique constraints are added back.
850 AS [ExecutionOrder],
'CONSTRAINT '
+ QUOTENAME([conz].[name])
+ ' FOREIGN KEY ('
+ [ChildCollection].[ChildColumns]
+ ') REFERENCES '
+ QUOTENAME(SCHEMA_NAME([conz].[schema_id]))
+ '.'
+ QUOTENAME(OBJECT_NAME([conz].[referenced_object_id]))
+ ' (' + [ParentCollection].[ParentColumns]
+ ') '
+ CASE [conz].[update_referential_action]
WHEN 0 THEN '' --' ON UPDATE NO ACTION '
WHEN 1 THEN ' ON UPDATE CASCADE '
WHEN 2 THEN ' ON UPDATE SET NULL '
ELSE ' ON UPDATE SET DEFAULT '
END
+ CASE [conz].[delete_referential_action]
WHEN 0 THEN '' --' ON DELETE NO ACTION '
WHEN 1 THEN ' ON DELETE CASCADE '
WHEN 2 THEN ' ON DELETE SET NULL '
ELSE ' ON DELETE SET DEFAULT '
END
+ CASE [conz].[is_not_for_replication]
WHEN 1 THEN ' NOT FOR REPLICATION '
ELSE ''
END
+ ',' AS [Command]
FROM [sys].[foreign_keys] AS [conz]
INNER JOIN [sys].[foreign_key_columns] AS [colz]
ON [conz].[object_id] = [colz].[constraint_object_id]
INNER JOIN (--gets my child tables column names
SELECT
[conz].[name],
--technically, FK's can contain up to 16 columns, but real life is often a single column. coding here is for all columns
[ChildColumns] = STUFF((SELECT
',' + QUOTENAME([REFZ].[name])
FROM [sys].[foreign_key_columns] AS [fkcolz]
INNER JOIN [sys].[columns] AS [REFZ]
ON [fkcolz].[parent_object_id] = [REFZ].[object_id]
AND [fkcolz].[parent_column_id] = [REFZ].[column_id]
WHERE [fkcolz].[parent_object_id] = [conz].[parent_object_id]
AND [fkcolz].[constraint_object_id] = [conz].[object_id]
ORDER BY
[fkcolz].[constraint_column_id]
FOR XML PATH(''), TYPE).[value]('.','varchar(max)'),1,1,'')
FROM [sys].[foreign_keys] AS [conz]
INNER JOIN [sys].[foreign_key_columns] AS [colz]
ON [conz].[object_id] = [colz].[constraint_object_id]
WHERE [conz].[parent_object_id]= @TABLE_ID
GROUP BY
[conz].[name],
[conz].[parent_object_id],--- without GROUP BY multiple rows are returned
[conz].[object_id]
) AS [ChildCollection]
ON [conz].[name] = [ChildCollection].[name]
INNER JOIN (--gets the parent tables column names for the FK reference
SELECT
[conz].[name],
[ParentColumns] = STUFF((SELECT
',' + [REFZ].[name]
FROM [sys].[foreign_key_columns] AS [fkcolz]
INNER JOIN [sys].[columns] AS [REFZ]
ON [fkcolz].[referenced_object_id] = [REFZ].[object_id]
AND [fkcolz].[referenced_column_id] = [REFZ].[column_id]
WHERE [fkcolz].[referenced_object_id] = [conz].[referenced_object_id]
AND [fkcolz].[constraint_object_id] = [conz].[object_id]
ORDER BY [fkcolz].[constraint_column_id]
FOR XML PATH(''), TYPE).[value]('.','varchar(max)'),1,1,'')
FROM [sys].[foreign_keys] AS [conz]
INNER JOIN [sys].[foreign_key_columns] AS [colz]
ON [conz].[object_id] = [colz].[constraint_object_id]
-- AND colz.parent_column_id
GROUP BY
[conz].[name],
[conz].[referenced_object_id],--- without GROUP BY multiple rows are returned
[conz].[object_id]
) AS [ParentCollection]
ON [conz].[name] = [ParentCollection].[name]
)AS [MyAlias];
--##############################################################################
--RULES
--##############################################################################
SET @RULESCONSTSQLS = '';
SELECT
@RULESCONSTSQLS = @RULESCONSTSQLS
+ ISNULL(
@vbCrLf
+ 'if not exists(SELECT [name] FROM sys.objects WHERE TYPE=''R'' AND schema_id = ' COLLATE SQL_Latin1_General_CP1_CI_AS + CONVERT(VARCHAR(30),[objz].[schema_id]) + ' AND [name] = ''' COLLATE SQL_Latin1_General_CP1_CI_AS + QUOTENAME(OBJECT_NAME([colz].[rule_object_id])) + ''')' COLLATE SQL_Latin1_General_CP1_CI_AS + @vbCrLf
+ [MODS].[definition] + @vbCrLf + 'GO' COLLATE SQL_Latin1_General_CP1_CI_AS + @vbCrLf
+ 'EXEC sp_binderule ' + QUOTENAME([objz].[name]) + ', ''' + QUOTENAME(OBJECT_NAME([colz].[object_id])) + '.' + QUOTENAME([colz].[name]) + '''' COLLATE SQL_Latin1_General_CP1_CI_AS + @vbCrLf + 'GO' COLLATE SQL_Latin1_General_CP1_CI_AS ,'')
FROM [sys].[columns] [colz]
INNER JOIN [sys].[objects] [objz]
ON [objz].[object_id] = [colz].[object_id]
INNER JOIN [sys].[sql_modules] AS [MODS]
ON [colz].[rule_object_id] = [MODS].[object_id]
WHERE [colz].[rule_object_id] <> 0
AND [colz].[object_id] = @TABLE_ID;
--##############################################################################
--TRIGGERS
--##############################################################################
SET @TRIGGERSTATEMENT = '';
SELECT
@TRIGGERSTATEMENT = @TRIGGERSTATEMENT + @vbCrLf + [MODS].[definition] + @vbCrLf + 'GO'
FROM [sys].[sql_modules] AS [MODS]
WHERE [MODS].[object_id] IN(SELECT
[objz].[object_id]
FROM [sys].[objects] AS [objz]
WHERE [objz].[type] = 'TR'
AND [objz].[parent_object_id] = @TABLE_ID);
IF @TRIGGERSTATEMENT <> '' COLLATE SQL_Latin1_General_CP1_CI_AS
SET @TRIGGERSTATEMENT = @vbCrLf + 'GO' COLLATE SQL_Latin1_General_CP1_CI_AS + @vbCrLf + @TRIGGERSTATEMENT;
--##############################################################################
--NEW SECTION QUERY ALL EXTENDED PROPERTIES
--##############################################################################
SET @EXTENDEDPROPERTIES = '';
SELECT @EXTENDEDPROPERTIES =
@EXTENDEDPROPERTIES + @vbCrLf +
'EXEC sys.sp_addextendedproperty
@name = N''' COLLATE SQL_Latin1_General_CP1_CI_AS + [name] + ''', @value = N''' COLLATE SQL_Latin1_General_CP1_CI_AS + REPLACE(CONVERT(VARCHAR(MAX),[value]),'''','''''') + ''',
@level0type = N''SCHEMA'', @level0name = ' COLLATE SQL_Latin1_General_CP1_CI_AS + QUOTENAME(@SCHEMANAME) + ',
@level1type = N''TABLE'', @level1name = ' COLLATE SQL_Latin1_General_CP1_CI_AS + QUOTENAME(@TBLNAME) + ';'
--SELECT objtype, objname, name, value
FROM [sys].[fn_listextendedproperty] (NULL, 'schema', @SCHEMANAME, 'table', @TBLNAME, NULL, NULL);
--OMacoder suggestion for column extended properties http://www.sqlservercentral.com/Forums/FindPost1651606.aspx
;WITH [obj] AS (
SELECT [split].[a].[value]('.', 'VARCHAR(20)') AS [name]
FROM (
SELECT CAST ('<M>' + REPLACE('column,constraint,index,trigger,parameter', ',', '</M><M>') + '</M>' AS XML) AS [data]
) AS [A]
CROSS APPLY [data].[nodes] ('/M') AS [split]([a])
)
SELECT
@EXTENDEDPROPERTIES =
@EXTENDEDPROPERTIES + @vbCrLf + @vbCrLf +
'EXEC sys.sp_addextendedproperty
@name = N''' COLLATE SQL_Latin1_General_CP1_CI_AS
+ [lep].[name]
+ ''', @value = N''' COLLATE SQL_Latin1_General_CP1_CI_AS
+ REPLACE(CONVERT(VARCHAR(MAX),[lep].[value]),'''','''''') + ''',
@level0type = N''SCHEMA'', @level0name = ' COLLATE SQL_Latin1_General_CP1_CI_AS
+ QUOTENAME(@SCHEMANAME)
+ ',
@level1type = N''TABLE'', @level1name = ' COLLATE SQL_Latin1_General_CP1_CI_AS
+ QUOTENAME(@TBLNAME)
+ ',
@level2type = N''' COLLATE SQL_Latin1_General_CP1_CI_AS
+ UPPER([obj].[name])
+ ''', @level2name = ' COLLATE SQL_Latin1_General_CP1_CI_AS
+ QUOTENAME([lep].[objname]) + ';' COLLATE SQL_Latin1_General_CP1_CI_AS
--SELECT objtype, objname, name, value
FROM [obj]
CROSS APPLY [sys].[fn_listextendedproperty] (NULL, 'schema', @SCHEMANAME, 'table', @TBLNAME, [obj].[name], NULL) AS [lep];
IF @EXTENDEDPROPERTIES <> '' COLLATE SQL_Latin1_General_CP1_CI_AS
SET @EXTENDEDPROPERTIES = @vbCrLf + 'GO' COLLATE SQL_Latin1_General_CP1_CI_AS + @vbCrLf + @EXTENDEDPROPERTIES;
--##############################################################################
--FINAL CLEANUP AND PRESENTATION
--##############################################################################
--at this point, there is a trailing comma, or it blank
--WITH statment has a trailing comma
IF @WithStatement > ''
SET @WithStatement='WITH (' + SUBSTRING(@WithStatement,1,LEN(@WithStatement) -1) + ')'
SELECT
@FINALSQL = @FINALSQL
+ @TemporalStatement
+ @CONSTRAINTSQLS
+ @CHECKCONSTSQLS
+ @FKSQLS;
--note that this trims the trailing comma from the end of the statements
SET @FINALSQL = SUBSTRING(@FINALSQL,1,LEN(@FINALSQL) -1) ;
SET @FINALSQL = @FINALSQL + ')' COLLATE SQL_Latin1_General_CP1_CI_AS + @vbCrLf + @WithStatement COLLATE SQL_Latin1_General_CP1_CI_AS + @vbCrLf ;
SET @input = @vbCrLf
+ @FINALSQL
+ @INDEXSQLS
+ @RULESCONSTSQLS
+ @TRIGGERSTATEMENT
+ @EXTENDEDPROPERTIES;
SELECT @input AS [Item];
RETURN 0;
--##############################################################################
-- END Normal Table Processing
--##############################################################################
--simple, primitive version to get the results of a TEMP table from the TEMP db.
--##############################################################################
-- NEW Temp Table Logic
--##############################################################################
TEMPPROCESS:
SELECT @TABLE_ID = OBJECT_ID('tempdb..' COLLATE SQL_Latin1_General_CP1_CI_AS + @TBLNAME);
--##############################################################################
-- Valid temp Table, Continue Processing
--##############################################################################
SELECT @FINALSQL =
CASE
WHEN [tabz].[history_table_id] IS NULL
THEN ''
ELSE 'ALTER TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME([tabz].[object_id]) ) + '.' + QUOTENAME(OBJECT_NAME([tabz].[object_id])) + ' SET (SYSTEM_VERSIONING = OFF);' + @vbCrLf
+ 'IF OBJECT_ID(''' + QUOTENAME(OBJECT_SCHEMA_NAME([tabz].[history_table_id]) ) + '.' + QUOTENAME(OBJECT_NAME([tabz].[history_table_id])) + ''') IS NOT NULL ' + @vbCrLf
+ 'DROP TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME([tabz].[history_table_id])) + '.' + QUOTENAME(OBJECT_NAME([tabz].[history_table_id])) + ' ' + @vbCrLf + 'GO' + @vbCrLf
END
+ 'IF OBJECT_ID(''' + QUOTENAME(OBJECT_SCHEMA_NAME([tabz].[object_id]) ) + '.' + QUOTENAME(OBJECT_NAME([tabz].[object_id])) + ''') IS NOT NULL ' + @vbCrLf
+ 'DROP TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME([tabz].[object_id])) + '.' + QUOTENAME(OBJECT_NAME([tabz].[object_id])) + ' ' + @vbCrLf + 'GO' + @vbCrLf
+ 'CREATE TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME([tabz].[object_id])) + '.' + QUOTENAME(OBJECT_NAME([tabz].[object_id])) + ' ( '
FROM [sys].[tables] [tabz] WHERE [tabz].[object_id] = OBJECT_ID(@TABLE_ID)
--removed invalid code here which potentially selected wrong table--thansk David Grifiths @SSC!
SELECT
@STRINGLEN = MAX(LEN([colz].[name])) + 1
FROM [tempdb].[sys].[objects] AS [objz]
INNER JOIN [tempdb].[sys].[columns] AS [colz]
ON [objz].[object_id] = [colz].[object_id]
AND [objz].[object_id] = @TABLE_ID;
--##############################################################################
--Get the hash index definitions for memory optimized tables, if any.
--##############################################################################
--##############################################################################
--Get the columns, their definitions and defaults.
--##############################################################################
SELECT
@FINALSQL = @FINALSQL
+ CASE
WHEN [colz].[is_computed] = 1
THEN @vbCrLf
+ QUOTENAME([colz].[name])
+ ' '
+ SPACE(@STRINGLEN - LEN([colz].[name]))
+ 'AS ' + ISNULL([CALC].[definition],'')
+ CASE
WHEN [CALC].[is_persisted] = 1
THEN ' PERSISTED'
ELSE ''
END
ELSE @vbCrLf
+ QUOTENAME([colz].[name])
+ ' '
+ SPACE(@STRINGLEN - LEN([colz].[name]))
+ UPPER(TYPE_NAME([colz].[user_type_id]))
+ CASE
-- data types with precision and scale IE DECIMAL(18,3), NUMERIC(10,2)
WHEN TYPE_NAME([colz].[user_type_id]) IN ('decimal','numeric')
THEN '('
+ CONVERT(VARCHAR,[colz].[precision])
+ ','
+ CONVERT(VARCHAR,[colz].[scale])
+ ') '
+ SPACE(6 - LEN(CONVERT(VARCHAR,[colz].[precision])
+ ','
+ CONVERT(VARCHAR,[colz].[scale])))
+ SPACE(7)
+ SPACE(16 - LEN(TYPE_NAME([colz].[user_type_id])))
+ CASE
WHEN [colz].[is_identity] = 1
THEN ' IDENTITY(1,1)'
ELSE ''
----WHEN COLUMNPROPERTY ( @TABLE_ID , COLS.[name] , 'IsIdentity' ) = 1
----THEN ' IDENTITY('
---- + CONVERT(VARCHAR,ISNULL(IDENT_SEED('tempdb..' + @TBLNAME),1) )
---- + ','
---- + CONVERT(VARCHAR,ISNULL(IDENT_INCR('tempdb..' + @TBLNAME),1) )
---- + ')'
----ELSE ''
END
+ CASE WHEN [colz].[is_sparse] = 1 THEN ' sparse' ELSE ' ' END
+ CASE
WHEN [colz].[is_nullable] = 0
THEN ' NOT NULL'
ELSE ' NULL'
END
-- data types with scale IE datetime2(7),TIME(7)
WHEN TYPE_NAME([colz].[user_type_id]) IN ('datetime2','datetimeoffset','time')
THEN CASE
WHEN [colz].[scale] < 7 THEN
'('
+ CONVERT(VARCHAR,[colz].[scale])
+ ') '
ELSE
' '
END
+ SPACE(4)
+ SPACE(@ObjectDataTypeLen - LEN(TYPE_NAME([colz].[user_type_id])))
+ ' '
+ CASE WHEN [colz].[is_sparse] = 1 THEN ' sparse' ELSE ' ' END
+ CASE [colz].[generated_always_type]
WHEN 0 THEN ''
WHEN 1 THEN ' GENERATED ALWAYS AS ROW START'
WHEN 2 THEN ' GENERATED ALWAYS AS ROW END'
ELSE ''
END
+ CASE WHEN [colz].[is_hidden] = 1 THEN ' HIDDEN' ELSE '' END
+ CASE
WHEN [colz].[is_nullable] = 0
THEN ' NOT NULL'
ELSE ' NULL'
END
--data types with no/precision/scale,IE FLOAT
WHEN TYPE_NAME([colz].[user_type_id]) IN ('float') --,'real')
THEN
--addition: if 53, no need to specifically say (53), otherwise display it
CASE
WHEN [colz].[precision] = 53
THEN SPACE(11 - LEN(CONVERT(VARCHAR,[colz].[precision])))
+ SPACE(7)
+ SPACE(@ObjectDataTypeLen - LEN(TYPE_NAME([colz].[user_type_id])))
+ CASE WHEN [colz].[is_sparse] = 1 THEN ' sparse' ELSE ' ' END
+ CASE
WHEN [colz].[is_nullable] = 0
THEN ' NOT NULL'
ELSE ' NULL'
END
ELSE '('
+ CONVERT(VARCHAR,[colz].[precision])
+ ') '
+ SPACE(6 - LEN(CONVERT(VARCHAR,[colz].[precision])))
+ SPACE(7) + SPACE(@ObjectDataTypeLen - LEN(TYPE_NAME([colz].[user_type_id])))
+ CASE WHEN [colz].[is_sparse] = 1 THEN ' sparse' ELSE ' ' END
+ CASE
WHEN [colz].[is_nullable] = 0
THEN ' NOT NULL'
ELSE ' NULL'
END
END
--ie VARCHAR(40)
--##############################################################################
-- COLLATE STATEMENTS in tempdb!
-- personally i do not like collation statements,
-- but included here to make it easy on those who do
--##############################################################################
WHEN TYPE_NAME([colz].[user_type_id]) IN ('char','varchar','binary','varbinary')
THEN CASE
WHEN [colz].[max_length] = -1
THEN '(max)'
+ SPACE(6 - LEN(CONVERT(VARCHAR,[colz].[max_length])))
+ SPACE(7) + SPACE(@ObjectDataTypeLen - LEN(TYPE_NAME([colz].[user_type_id])))
----collate to comment out when not desired
--+ CASE
-- WHEN COLS.collation_name IS NULL
-- THEN ''
-- ELSE ' COLLATE ' + COLS.collation_name
-- END
+ CASE WHEN [colz].[is_sparse] = 1 THEN ' sparse' ELSE ' ' END
+ CASE
WHEN [colz].[is_nullable] = 0
THEN ' NOT NULL'
ELSE ' NULL'
END
ELSE '('
+ CONVERT(VARCHAR,[colz].[max_length])
+ ') '
+ SPACE(6 - LEN(CONVERT(VARCHAR,[colz].[max_length])))
+ SPACE(7) + SPACE(@ObjectDataTypeLen - LEN(TYPE_NAME([colz].[user_type_id])))
----collate to comment out when not desired
--+ CASE
-- WHEN COLS.collation_name IS NULL
-- THEN ''
-- ELSE ' COLLATE ' + COLS.collation_name
-- END
+ CASE WHEN [colz].[is_sparse] = 1 THEN ' sparse' ELSE ' ' END
+ CASE
WHEN [colz].[is_nullable] = 0
THEN ' NOT NULL'
ELSE ' NULL'
END
END
--data type with max_length ( BUT DOUBLED) ie NCHAR(33), NVARCHAR(40)
WHEN TYPE_NAME([colz].[user_type_id]) IN ('nchar','nvarchar')
THEN CASE
WHEN [colz].[max_length] = -1
THEN '(max)'
+ SPACE(5 - LEN(CONVERT(VARCHAR,([colz].[max_length] / 2))))
+ SPACE(7)
+ SPACE(@ObjectDataTypeLen - LEN(TYPE_NAME([colz].[user_type_id])))
-- --collate to comment out when not desired
--+ CASE
-- WHEN COLS.collation_name IS NULL
-- THEN ''
-- ELSE ' COLLATE ' + COLS.collation_name
-- END
+ CASE WHEN [colz].[is_sparse] = 1 THEN ' sparse' ELSE ' ' END
+ CASE
WHEN [colz].[is_nullable] = 0
THEN ' NOT NULL'
ELSE ' NULL'
END
ELSE '('
+ CONVERT(VARCHAR,([colz].[max_length] / 2))
+ ') '
+ SPACE(6 - LEN(CONVERT(VARCHAR,([colz].[max_length] / 2))))
+ SPACE(7)
+ SPACE(@ObjectDataTypeLen - LEN(TYPE_NAME([colz].[user_type_id])))
-- --collate to comment out when not desired
--+ CASE
-- WHEN COLS.collation_name IS NULL
-- THEN ''
-- ELSE ' COLLATE ' + COLS.collation_name
-- END
+ CASE WHEN [colz].[is_sparse] = 1 THEN ' sparse' ELSE ' ' END
+ CASE
WHEN [colz].[is_nullable] = 0
THEN ' NOT NULL'
ELSE ' NULL'
END
END
-- other data type IE INT, DATETIME, MONEY, CUSTOM DATA TYPE,...
WHEN TYPE_NAME([colz].[user_type_id]) IN ('datetime','money','text','image','real')
THEN SPACE(18 - LEN(TYPE_NAME([colz].[user_type_id])))
+ ' '
+ CASE WHEN [colz].[is_sparse] = 1 THEN ' sparse' ELSE ' ' END
+ CASE
WHEN [colz].[is_nullable] = 0
THEN ' NOT NULL'
ELSE ' NULL'
END
--IE INT
ELSE SPACE(@ObjectDataTypeLen - LEN(TYPE_NAME([colz].[user_type_id])))
+ CASE
WHEN [colz].[is_identity] = 1
THEN ' IDENTITY(1,1)'
ELSE ' '
----WHEN COLUMNPROPERTY ( @TABLE_ID , COLS.[name] , 'IsIdentity' ) = 1
----THEN ' IDENTITY('
---- + CONVERT(VARCHAR,ISNULL(IDENT_SEED('tempdb..' + @TBLNAME),1) )
---- + ','
---- + CONVERT(VARCHAR,ISNULL(IDENT_INCR('tempdb..' + @TBLNAME),1) )
---- + ')'
----ELSE ' '
END
+ SPACE(2)
+ CASE WHEN [colz].[is_sparse] = 1 THEN ' sparse' ELSE ' ' END
+ CASE
WHEN [colz].[is_nullable] = 0
THEN ' NOT NULL'
ELSE ' NULL'
END
END
+ CASE
WHEN [colz].[default_object_id] = 0
THEN ''
ELSE ' DEFAULT ' + ISNULL([DEF].[definition] ,'')
--optional section in case NAMED default cosntraints are needed:
--ELSE ' CONSTRAINT [' + DEF.name + '] DEFAULT '+ REPLACE(REPLACE(ISNULL(DEF.[definition] ,''),'((','('),'))',')')
--i thought it needed to be handled differently! NOT!
END --CASE cdefault
END --iscomputed
+ ','
FROM [tempdb].[sys].[columns] AS [colz]
LEFT OUTER JOIN [tempdb].[sys].[default_constraints] AS [DEF]
ON [colz].[default_object_id] = [DEF].[object_id]
LEFT OUTER JOIN [tempdb].[sys].[computed_columns] AS [CALC]
ON [colz].[object_id] = [CALC].[object_id]
AND [colz].[column_id] = [CALC].[column_id]
WHERE [colz].[object_id]=@TABLE_ID
ORDER BY [colz].[column_id];
--##############################################################################
--used for formatting the rest of the constraints:
--##############################################################################
SELECT
@STRINGLEN = MAX(LEN([objz].[name])) + 1
FROM [tempdb].[sys].[objects] AS [objz];
--##############################################################################
--PK/Unique Constraints and Indexes, using the 2005/08 INCLUDE syntax
--##############################################################################
DECLARE @Results2 TABLE (
[SCHEMA_ID] INT,
[SCHEMA_NAME] VARCHAR(255),
[OBJECT_ID] INT,
[OBJECT_NAME] VARCHAR(255),
[index_id] INT,
[index_name] VARCHAR(255),
[ROWS] BIGINT,
[SizeMB] DECIMAL(19,3),
[IndexDepth] INT,
[TYPE] INT,
[type_desc] VARCHAR(30),
[fill_factor] INT,
[is_unique] INT,
[is_primary_key] INT ,
[is_unique_constraint] INT,
[index_columns_key] VARCHAR(MAX),
[index_columns_include] VARCHAR(MAX),
[has_filter] BIT ,
[filter_definition] VARCHAR(MAX),
[currentFilegroupName] VARCHAR(128),
[CurrentCompression] VARCHAR(128));
INSERT INTO @Results2
SELECT
[SCH].[schema_id], [SCH].[name] AS [SCHEMA_NAME],
[objz].[object_id], [objz].[name] AS [OBJECT_NAME],
[IDX].[index_id], ISNULL([IDX].[name], '---') AS [index_name],
[partitions].[ROWS], [partitions].[SizeMB], INDEXPROPERTY([objz].[object_id], [IDX].[name], 'IndexDepth') AS [IndexDepth],
[IDX].[type], [IDX].[type_desc], [IDX].[fill_factor],
[IDX].[is_unique], [IDX].[is_primary_key], [IDX].[is_unique_constraint],
ISNULL([Index_Columns].[index_columns_key], '---') AS [index_columns_key],
ISNULL([Index_Columns].[index_columns_include], '---') AS [index_columns_include],
[IDX].[has_filter],
[IDX].[filter_definition],
[filz].[name],
ISNULL([p].[data_compression_desc],'')
FROM [tempdb].[sys].[objects] AS [objz]
INNER JOIN [tempdb].[sys].[schemas] AS [SCH] ON [objz].[schema_id]=[SCH].[schema_id]
INNER JOIN [tempdb].[sys].[indexes] AS [IDX] ON [objz].[object_id]=[IDX].[object_id]
INNER JOIN [sys].[filegroups] AS [filz] ON [IDX].[data_space_id] = [filz].[data_space_id]
INNER JOIN [sys].[partitions] AS [p] ON [IDX].[object_id] = [p].[object_id] AND [IDX].[index_id] = [p].[index_id]
INNER JOIN (
SELECT
[statz].[object_id], [statz].[index_id], SUM([statz].[row_count]) AS [ROWS],
CONVERT(NUMERIC(19,3), CONVERT(NUMERIC(19,3), SUM([statz].[in_row_reserved_page_count]+[statz].[lob_reserved_page_count]+[statz].[row_overflow_reserved_page_count]))/CONVERT(NUMERIC(19,3), 128)) AS [SizeMB]
FROM [tempdb].[sys].[dm_db_partition_stats] AS [statz]
GROUP BY [statz].[object_id], [statz].[index_id]
) AS [partitions]
ON [IDX].[object_id]=[partitions].[object_id]
AND [IDX].[index_id]=[partitions].[index_id]
CROSS APPLY (
SELECT
LEFT([Index_Columns].[index_columns_key], LEN([Index_Columns].[index_columns_key])-1) AS [index_columns_key],
LEFT([Index_Columns].[index_columns_include], LEN([Index_Columns].[index_columns_include])-1) AS [index_columns_include]
FROM
(
SELECT
(
SELECT QUOTENAME([colz].[name]) + CASE WHEN [IXCOLS].[is_descending_key] = 0 THEN ' asc' ELSE ' desc' END + ',' + ' '
FROM [tempdb].[sys].[index_columns] AS [IXCOLS]
INNER JOIN [tempdb].[sys].[columns] AS [colz]
ON [IXCOLS].[column_id] = [colz].[column_id]
AND [IXCOLS].[object_id] = [colz].[object_id]
WHERE [IXCOLS].[is_included_column] = 0
AND [IDX].[object_id] = [IXCOLS].[object_id]
AND [IDX].[index_id] = [IXCOLS].[index_id]
ORDER BY [IXCOLS].[key_ordinal]
FOR XML PATH('')
) AS [index_columns_key],
(
SELECT QUOTENAME([colz].[name]) + ',' + ' '
FROM [tempdb].[sys].[index_columns] AS [IXCOLS]
INNER JOIN [tempdb].[sys].[columns] AS [colz]
ON [IXCOLS].[column_id] = [colz].[column_id]
AND [IXCOLS].[object_id] = [colz].[object_id]
WHERE [IXCOLS].[is_included_column] = 1
AND [IDX].[object_id] = [IXCOLS].[object_id]
AND [IDX].[index_id] = [IXCOLS].[index_id]
ORDER BY [IXCOLS].[index_column_id]
FOR XML PATH('')
) AS [index_columns_include]
) AS [Index_Columns]
) AS [Index_Columns]
WHERE [SCH].[name] LIKE CASE
WHEN @SCHEMANAME = '' COLLATE SQL_Latin1_General_CP1_CI_AS
THEN [SCH].[name]
ELSE @SCHEMANAME
END
AND [objz].[name] LIKE CASE
WHEN @TBLNAME = '' COLLATE SQL_Latin1_General_CP1_CI_AS
THEN [objz].[name]
ELSE @TBLNAME
END
ORDER BY
[SCH].[name],
[objz].[name],
[IDX].[name];
--@Results2 table has both PK,s Uniques and indexes in thme...pull them out for adding to funal results:
SET @CONSTRAINTSQLS = '' COLLATE SQL_Latin1_General_CP1_CI_AS;
SET @INDEXSQLS = '' COLLATE SQL_Latin1_General_CP1_CI_AS;
--##############################################################################
--constraints
--##############################################################################
SELECT @CONSTRAINTSQLS = @CONSTRAINTSQLS
+ CASE
WHEN [is_primary_key] = 1 OR [is_unique] = 1
THEN @vbCrLf
+ 'CONSTRAINT ' COLLATE SQL_Latin1_General_CP1_CI_AS + QUOTENAME([index_name]) + ' '
+ SPACE(@STRINGLEN - LEN([index_name]))
+ CASE
WHEN [is_primary_key] = 1
THEN ' PRIMARY KEY ' COLLATE SQL_Latin1_General_CP1_CI_AS
ELSE CASE
WHEN [is_unique] = 1
THEN ' UNIQUE ' COLLATE SQL_Latin1_General_CP1_CI_AS
ELSE '' COLLATE SQL_Latin1_General_CP1_CI_AS
END
END
+ [type_desc]
+ CASE
WHEN [type_desc]='NONCLUSTERED'
THEN '' COLLATE SQL_Latin1_General_CP1_CI_AS
ELSE ' '
END
+ ' (' + [index_columns_key] + ')'
+ CASE
WHEN [index_columns_include] <> '---'
THEN ' INCLUDE (' + [index_columns_include] + ')'
ELSE '' COLLATE SQL_Latin1_General_CP1_CI_AS
END
+ CASE
WHEN [has_filter] = 1
THEN ' ' + [filter_definition]
ELSE ' '
END
+ CASE WHEN [fill_factor] <> 0 OR [CurrentCompression] <> 'NONE'
THEN ' WITH (' + CASE
WHEN [fill_factor] <> 0
THEN 'FILLFACTOR = ' + CONVERT(VARCHAR(30),[fill_factor])
ELSE '' COLLATE SQL_Latin1_General_CP1_CI_AS
END
+ CASE
WHEN [fill_factor] <> 0 AND [CurrentCompression] <> 'NONE' THEN ',DATA_COMPRESSION = ' + [CurrentCompression] + ' '
WHEN [fill_factor] <> 0 AND [CurrentCompression] = 'NONE' THEN ''
WHEN [fill_factor] = 0 AND [CurrentCompression] <> 'NONE' THEN 'DATA_COMPRESSION = ' + [CurrentCompression] + ' '
ELSE '' COLLATE SQL_Latin1_General_CP1_CI_AS
END
+ ')'
ELSE '' COLLATE SQL_Latin1_General_CP1_CI_AS
END
ELSE '' COLLATE SQL_Latin1_General_CP1_CI_AS
END + ','
FROM @Results2
WHERE [type_desc] != 'HEAP'
AND [is_primary_key] = 1
OR [is_unique] = 1
ORDER BY
[is_primary_key] DESC,
[is_unique] DESC;
--##############################################################################
--indexes
--##############################################################################
SELECT @INDEXSQLS = @INDEXSQLS
+ CASE
WHEN [is_primary_key] = 0 OR [is_unique] = 0
THEN @vbCrLf
+ 'CREATE ' COLLATE SQL_Latin1_General_CP1_CI_AS + [type_desc] + ' INDEX ' COLLATE SQL_Latin1_General_CP1_CI_AS + QUOTENAME([index_name]) + ' ' COLLATE SQL_Latin1_General_CP1_CI_AS
+ @vbCrLf
+ ' ON ' COLLATE SQL_Latin1_General_CP1_CI_AS
+ QUOTENAME([SCHEMA_NAME]) + '.' + QUOTENAME([OBJECT_NAME])
+ CASE
WHEN [CurrentCompression] = 'COLUMNSTORE' COLLATE SQL_Latin1_General_CP1_CI_AS
THEN ' (' COLLATE SQL_Latin1_General_CP1_CI_AS+ [index_columns_include] + ')' COLLATE SQL_Latin1_General_CP1_CI_AS
ELSE ' (' COLLATE SQL_Latin1_General_CP1_CI_AS+ [index_columns_key] + ')' COLLATE SQL_Latin1_General_CP1_CI_AS
END
+ CASE
WHEN [CurrentCompression] = 'COLUMNSTORE' COLLATE SQL_Latin1_General_CP1_CI_AS
THEN '' COLLATE SQL_Latin1_General_CP1_CI_AS
ELSE
CASE
WHEN [index_columns_include] <> '---'
THEN @vbCrLf + ' INCLUDE (' COLLATE SQL_Latin1_General_CP1_CI_AS + [index_columns_include] + ')' COLLATE SQL_Latin1_General_CP1_CI_AS
ELSE '' COLLATE SQL_Latin1_General_CP1_CI_AS
END
END
--2008 filtered indexes syntax
+ CASE
WHEN [has_filter] = 1
THEN @vbCrLf + ' WHERE ' COLLATE SQL_Latin1_General_CP1_CI_AS + [filter_definition]
ELSE '' COLLATE SQL_Latin1_General_CP1_CI_AS
END
+ CASE WHEN [fill_factor] <> 0 OR [CurrentCompression] <> 'NONE' COLLATE SQL_Latin1_General_CP1_CI_AS
THEN ' WITH (' COLLATE SQL_Latin1_General_CP1_CI_AS + CASE
WHEN [fill_factor] <> 0
THEN 'FILLFACTOR = ' COLLATE SQL_Latin1_General_CP1_CI_AS + CONVERT(VARCHAR(30),[fill_factor])
ELSE '' COLLATE SQL_Latin1_General_CP1_CI_AS
END
+ CASE
WHEN [fill_factor] <> 0 AND [CurrentCompression] <> 'NONE' COLLATE SQL_Latin1_General_CP1_CI_AS THEN ',DATA_COMPRESSION = ' COLLATE SQL_Latin1_General_CP1_CI_AS + [CurrentCompression] + ' '
WHEN [fill_factor] <> 0 AND [CurrentCompression] = 'NONE' COLLATE SQL_Latin1_General_CP1_CI_AS THEN '' COLLATE SQL_Latin1_General_CP1_CI_AS
WHEN [fill_factor] = 0 AND [CurrentCompression] <> 'NONE' COLLATE SQL_Latin1_General_CP1_CI_AS THEN 'DATA_COMPRESSION = ' COLLATE SQL_Latin1_General_CP1_CI_AS+ [CurrentCompression] + ' '
ELSE '' COLLATE SQL_Latin1_General_CP1_CI_AS
END
+ ')' COLLATE SQL_Latin1_General_CP1_CI_AS
ELSE '' COLLATE SQL_Latin1_General_CP1_CI_AS
END
END
FROM @Results2
WHERE [type_desc] != 'HEAP'
AND [is_primary_key] = 0
AND [is_unique] = 0
ORDER BY
[is_primary_key] DESC,
[is_unique] DESC;
IF @INDEXSQLS <> '' COLLATE SQL_Latin1_General_CP1_CI_AS
SET @INDEXSQLS = @vbCrLf + 'GO' COLLATE SQL_Latin1_General_CP1_CI_AS+ @vbCrLf + @INDEXSQLS;
--##############################################################################
--CHECK Constraints
--##############################################################################
SET @CHECKCONSTSQLS = '';
SELECT
@CHECKCONSTSQLS = @CHECKCONSTSQLS
+ @vbCrLf
+ ISNULL('CONSTRAINT ' + QUOTENAME([objz].[name]) + ' '
+ SPACE(@STRINGLEN - LEN([objz].[name]))
+ ' CHECK ' + ISNULL([CHECKS].[definition],'')
+ ',','')
FROM [tempdb].[sys].[objects] AS [objz]
INNER JOIN [tempdb].[sys].[check_constraints] AS [CHECKS] ON [objz].[object_id] = [CHECKS].[object_id]
WHERE [objz].[type] = 'C'
AND [objz].[parent_object_id] = @TABLE_ID;
--##############################################################################
--FOREIGN KEYS
--##############################################################################
SET @FKSQLS = '' ;
SELECT
@FKSQLS=@FKSQLS
+ @vbCrLf + [MyAlias].[Command] FROM
(
SELECT
DISTINCT
--FK must be added AFTER the PK/unique constraints are added back.
850 AS [ExecutionOrder],
'CONSTRAINT '
+ QUOTENAME([conz].[name])
+ ' FOREIGN KEY ('
+ [ChildCollection].[ChildColumns]
+ ') REFERENCES '
+ QUOTENAME(SCHEMA_NAME([conz].[schema_id]))
+ '.'
+ QUOTENAME(OBJECT_NAME([conz].[referenced_object_id]))
+ ' (' + [ParentCollection].[ParentColumns]
+ ') '
+ CASE [conz].[update_referential_action]
WHEN 0 THEN '' --' ON UPDATE NO ACTION '
WHEN 1 THEN ' ON UPDATE CASCADE '
WHEN 2 THEN ' ON UPDATE SET NULL '
ELSE ' ON UPDATE SET DEFAULT '
END
+ CASE [conz].[delete_referential_action]
WHEN 0 THEN '' --' ON DELETE NO ACTION '
WHEN 1 THEN ' ON DELETE CASCADE '
WHEN 2 THEN ' ON DELETE SET NULL '
ELSE ' ON DELETE SET DEFAULT '
END
+ CASE [conz].[is_not_for_replication]
WHEN 1 THEN ' NOT FOR REPLICATION '
ELSE ''
END
+ ',' AS [Command]
FROM [sys].[foreign_keys] AS [conz]
INNER JOIN [sys].[foreign_key_columns] AS [colz]
ON [conz].[object_id] = [colz].[constraint_object_id]
INNER JOIN (--gets my child tables column names
SELECT
[conz].[name],
--technically, FK's can contain up to 16 columns, but real life is often a single column. coding here is for all columns
[ChildColumns] = STUFF((SELECT
',' + QUOTENAME([REFZ].[name])
FROM [sys].[foreign_key_columns] AS [fkcolz]
INNER JOIN [sys].[columns] AS [REFZ]
ON [fkcolz].[parent_object_id] = [REFZ].[object_id]
AND [fkcolz].[parent_column_id] = [REFZ].[column_id]
WHERE [fkcolz].[parent_object_id] = [conz].[parent_object_id]
AND [fkcolz].[constraint_object_id] = [conz].[object_id]
ORDER BY
[fkcolz].[constraint_column_id]
FOR XML PATH(''), TYPE).[value]('.','varchar(max)'),1,1,'')
FROM [sys].[foreign_keys] AS [conz]
INNER JOIN [sys].[foreign_key_columns] AS [colz]
ON [conz].[object_id] = [colz].[constraint_object_id]
WHERE [conz].[parent_object_id]= @TABLE_ID
GROUP BY
[conz].[name],
[conz].[parent_object_id],--- without GROUP BY multiple rows are returned
[conz].[object_id]
) AS [ChildCollection]
ON [conz].[name] = [ChildCollection].[name]
INNER JOIN (--gets the parent tables column names for the FK reference
SELECT
[conz].[name],
[ParentColumns] = STUFF((SELECT
',' + [REFZ].[name]
FROM [sys].[foreign_key_columns] AS [fkcolz]
INNER JOIN [sys].[columns] AS [REFZ]
ON [fkcolz].[referenced_object_id] = [REFZ].[object_id]
AND [fkcolz].[referenced_column_id] = [REFZ].[column_id]
WHERE [fkcolz].[referenced_object_id] = [conz].[referenced_object_id]
AND [fkcolz].[constraint_object_id] = [conz].[object_id]
ORDER BY [fkcolz].[constraint_column_id]
FOR XML PATH(''), TYPE).[value]('.','varchar(max)'),1,1,'')
FROM [sys].[foreign_keys] AS [conz]
INNER JOIN [sys].[foreign_key_columns] AS [colz]
ON [conz].[object_id] = [colz].[constraint_object_id]
-- AND colz.parent_column_id
GROUP BY
[conz].[name],
[conz].[referenced_object_id],--- without GROUP BY multiple rows are returned
[conz].[object_id]
) AS [ParentCollection]
ON [conz].[name] = [ParentCollection].[name]
)AS [MyAlias];
--##############################################################################
--RULES
--##############################################################################
SET @RULESCONSTSQLS = '' COLLATE SQL_Latin1_General_CP1_CI_AS;
SELECT
@RULESCONSTSQLS = @RULESCONSTSQLS
+ ISNULL(
@vbCrLf
+ 'if not exists(SELECT [name] FROM tempdb.sys.objects WHERE TYPE=''R'' AND schema_id = ' COLLATE SQL_Latin1_General_CP1_CI_AS
+ CONVERT(VARCHAR(30),[objz].[schema_id])
+ ' AND [name] = ''' COLLATE SQL_Latin1_General_CP1_CI_AS
+ QUOTENAME(OBJECT_NAME([colz].[rule_object_id]))
+ ''')' COLLATE SQL_Latin1_General_CP1_CI_AS
+ @vbCrLf
+ [MODS].[definition] + @vbCrLf
+ 'GO' COLLATE SQL_Latin1_General_CP1_CI_AS + @vbCrLf
+ 'EXEC sp_binderule ' COLLATE SQL_Latin1_General_CP1_CI_AS
+ QUOTENAME([objz].[name])
+ ', ''' COLLATE SQL_Latin1_General_CP1_CI_AS
+ QUOTENAME(OBJECT_NAME([colz].[object_id]))
+ '.' COLLATE SQL_Latin1_General_CP1_CI_AS + QUOTENAME([colz].[name])
+ '''' COLLATE SQL_Latin1_General_CP1_CI_AS
+ @vbCrLf
+ 'GO' ,'' COLLATE SQL_Latin1_General_CP1_CI_AS)
FROM [tempdb].[sys].[columns] [colz]
INNER JOIN [tempdb].[sys].[objects] [objz]
ON [objz].[object_id] = [colz].[object_id]
INNER JOIN [tempdb].[sys].[sql_modules] AS [MODS]
ON [colz].[rule_object_id] = [MODS].[object_id]
WHERE [colz].[rule_object_id] <> 0
AND [colz].[object_id] = @TABLE_ID;
--##############################################################################
--TRIGGERS
--##############################################################################
SET @TRIGGERSTATEMENT = '';
SELECT
@TRIGGERSTATEMENT = @TRIGGERSTATEMENT + @vbCrLf + [MODS].[definition] + @vbCrLf + 'GO'
FROM [tempdb].[sys].[sql_modules] AS [MODS]
WHERE [MODS].[object_id] IN(SELECT
[objz].[object_id]
FROM [tempdb].[sys].[objects] AS [objz]
WHERE [objz].[type] = 'TR'
AND [objz].[parent_object_id] = @TABLE_ID);
IF @TRIGGERSTATEMENT <> '' COLLATE SQL_Latin1_General_CP1_CI_AS
SET @TRIGGERSTATEMENT = @vbCrLf + 'GO' COLLATE SQL_Latin1_General_CP1_CI_AS + @vbCrLf + @TRIGGERSTATEMENT;
--##############################################################################
--NEW SECTION QUERY ALL EXTENDED PROPERTIES
--##############################################################################
SET @EXTENDEDPROPERTIES = '' COLLATE SQL_Latin1_General_CP1_CI_AS;
SELECT @EXTENDEDPROPERTIES =
@EXTENDEDPROPERTIES + @vbCrLf +
'EXEC tempdb.sys.sp_addextendedproperty
@name = N''' COLLATE SQL_Latin1_General_CP1_CI_AS
+ [name]
+ ''', @value = N''' COLLATE SQL_Latin1_General_CP1_CI_AS
+ REPLACE(CONVERT(VARCHAR(MAX),[value]),'''','''''') + ''',
@level0type = N''SCHEMA'', @level0name = ' COLLATE SQL_Latin1_General_CP1_CI_AS
+ QUOTENAME(@SCHEMANAME + ',
@level1type = N''TABLE'', @level1name = [' COLLATE SQL_Latin1_General_CP1_CI_AS
+ @TBLNAME)
+ '];' COLLATE SQL_Latin1_General_CP1_CI_AS
--SELECT objtype, objname, name, value
FROM [sys].[fn_listextendedproperty] (NULL, 'schema', @SCHEMANAME, 'table', @TBLNAME, NULL, NULL);
--OMacoder suggestion for column extended properties http://www.sqlservercentral.com/Forums/FindPost1651606.aspx
SELECT @EXTENDEDPROPERTIES =
@EXTENDEDPROPERTIES + @vbCrLf +
'EXEC sys.sp_addextendedproperty
@name = N''' COLLATE SQL_Latin1_General_CP1_CI_AS
+ [name]
+ ''', @value = N''' COLLATE SQL_Latin1_General_CP1_CI_AS
+ REPLACE(CONVERT(VARCHAR(MAX),[value]),'''','''''')
+ ''',
@level0type = N''SCHEMA'', @level0name = ' COLLATE SQL_Latin1_General_CP1_CI_AS
+ QUOTENAME(@SCHEMANAME) + ',
@level1type = N''TABLE'', @level1name = ' COLLATE SQL_Latin1_General_CP1_CI_AS
+ QUOTENAME(@TBLNAME) + ',
@level2type = N''COLUMN'', @level2name = ' COLLATE SQL_Latin1_General_CP1_CI_AS
+ QUOTENAME([objname]) + ';' COLLATE SQL_Latin1_General_CP1_CI_AS
--SELECT objtype, objname, name, value
FROM [sys].[fn_listextendedproperty] (NULL, 'schema', @SCHEMANAME, 'table', @TBLNAME, 'column', NULL);
IF @EXTENDEDPROPERTIES <> '' COLLATE SQL_Latin1_General_CP1_CI_AS
SET @EXTENDEDPROPERTIES = @vbCrLf + 'GO' COLLATE SQL_Latin1_General_CP1_CI_AS + @vbCrLf + @EXTENDEDPROPERTIES;
--##############################################################################
--FINAL CLEANUP AND PRESENTATION
--##############################################################################
--at this point, there is a trailing comma, or it blank
SELECT
@FINALSQL = @FINALSQL
+ @CONSTRAINTSQLS
+ @CHECKCONSTSQLS
+ @FKSQLS;
--note that this trims the trailing comma from the end of the statements
SET @FINALSQL = SUBSTRING(@FINALSQL,1,LEN(@FINALSQL) -1) ;
SET @FINALSQL = @FINALSQL + ')' COLLATE SQL_Latin1_General_CP1_CI_AS + @vbCrLf ;
SET @input = @vbCrLf
+ @FINALSQL
+ @INDEXSQLS
+ @RULESCONSTSQLS
+ @TRIGGERSTATEMENT
+ @EXTENDEDPROPERTIES;
SELECT @input AS [Item];
RETURN 0;
END; --PROC
GO
--#################################################################################################
--Mark as a system object
EXECUTE [sys].[sp_MS_marksystemobject] 'sp_GetDDL';
GRANT EXECUTE ON [dbo].[sp_GetDDL] TO PUBLIC;
--#################################################################################################
GO
*/
END;
SP SpOperationDBBackup
CREATE procedure [dbo].[SpOperationDBBackup]
AS
BEGIN
DECLARE @dbName as varchar(255) = DB_NAME();
DECLARE @fileName as varchar(1024) = CONCAT('C:\Database\',@dbName,'_',FORMAT(GETDATE(),'yyyyMMdd'),'.bak');
DBCC SHRINKFILE (2, 1); BACKUP DATABASE @dbName TO DISK = @fileName;
DBCC SHRINKFILE (2, 1); BACKUP DATABASE @dbName TO DISK = @fileName;
END;
--PATH ON LINUX: '/var/backups/DBbackup/hotels.bak'
SP SpOperationAutoUpdateDbTemplateDoc
CREATE procedure [dbo].[SpOperationAutoUpdateDbTemplateDoc] --(@result varchar(255) OUTPUT) --string otput
AS
BEGIN
-- TYPES P=SQL_STORED_PROCEDURE, TR=TRIGGER, IF=FUNCTION, V=VIEW
--CLEAN OLD DEFINITIONS
DELETE FROM [dbo].[DocSrvDocTemplateList] WHERE CONVERT(varchar(MAX),[Description]) IN ('SQL_STORED_PROCEDURE','SQL_TRIGGER','VIEW','SQL_INLINE_TABLE_VALUED_FUNCTION','SQL_SCALAR_FUNCTION');
DELETE FROM [dbo].[DocSrvDocTemplateList] WHERE CONVERT(varchar(MAX),[Description]) IN ('TABLE');
--INSERT ALL OTHER DEFINITIONS
INSERT INTO [dbo].[DocSrvDocTemplateList] ([GroupId],[InheritedCodeType],[Sequence],[Name],[Description],[Template],[UserId])
SELECT 8,'MSSQL',2000,
CASE SO.[type] COLLATE DATABASE_DEFAULT
WHEN 'P' THEN CONCAT('SP ',SO.[name] COLLATE DATABASE_DEFAULT)
WHEN 'TR' THEN CONCAT('TR ',SO.[name] COLLATE DATABASE_DEFAULT)
WHEN 'IF' THEN CONCAT('FN ',SO.[name] COLLATE DATABASE_DEFAULT)
WHEN 'V' THEN CONCAT('VIEW ',SO.[name] COLLATE DATABASE_DEFAULT)
ELSE CONCAT(SO.[type],SO.[name] COLLATE DATABASE_DEFAULT)
END AS [Name],
SO.[type_desc] COLLATE DATABASE_DEFAULT, SM.[definition] COLLATE DATABASE_DEFAULT,1
FROM sys.sql_modules SM INNER JOIN sys.Objects SO ON SM.Object_id = SO.Object_id ;
-- INSERTING TABLE DEFINITIONS PART
DECLARE @RowCnt int; SET @RowCnt = 0;
DECLARE @TableName NVarChar(250);DECLARE @TableDefinition NVarChar(MAX);
DECLARE @TableList TABLE (RowNum int IDENTITY (1, 1) Primary key NOT NULL,[TableName] nvarchar(250) NOT NULL);
DECLARE @TableDefinitionList TABLE (RowNum int IDENTITY (1, 1) Primary key NOT NULL, [Template] text NULL);
INSERT INTO @TableList ([TableName]) EXEC [dbo].SystemSpGetTableList;
WHILE @RowCnt <= (SELECT COUNT([RowNum]) FROM @tableList)
BEGIN
SET @RowCnt = @RowCnt + 1;
SELECT @TableName = [TableName] FROM @TableList WHERE [RowNum] = @RowCnt;
INSERT INTO @TableDefinitionList([Template]) EXEC sp_GetDDL @TableName;
END
--INSERT TABLE DEFINITIONS
INSERT INTO [dbo].[DocSrvDocTemplateList] ([GroupId],[InheritedCodeType],[Sequence],[Name],[Description],[Template],[UserId])
SELECT 8,'MSSQL',1000,CONCAT('TBL ',tl.[TableName]),'TABLE',tdl.[Template],1 FROM @TableList tl LEFT JOIN @TableDefinitionList tdl ON tl.RowNum = tdl.RowNum;
SELECT 'Update Templates in Doc Completed' as 'MessageList';
END;
SP SystemSpGetTableList
CREATE procedure [dbo].[SystemSpGetTableList]
AS
BEGIN
--GET ALL TABLES
SELECT TABLE_NAME as 'TableList'
FROM INFORMATION_SCHEMA.TABLES
UNION
--GET ALL VIEWS
SELECT
TABLE_NAME as 'TableList'
FROM INFORMATION_SCHEMA.VIEWS
END;
SP DB_HELP_INFO
CREATE procedure [dbo].[DB_HELP_INFO](@itemId int, @count int, @userId int)
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRAN
BEGIN TRY
--GET ALL INFO AOUT TABLES
--sp_help '[dbo].[BusinessBranchList]'
--REPAIR Id blocked by FOREIGN Key
--DELETE FROM [GLOBAL].[dbo].[AddressList]
--DBCC CHECKIDENT ([AddressList], RESEED, 0)
--INSERT first ID
--INSERT INTO AddressList(AddressType, CompanyName, ContactName, Street, City, PostCode, Phone, Email, BankAccount, Ico, Dic, UserId, Active)
--VALUES ('all', 'KlikneteZde.Cz', 'Libor Svoboda', 'Žlutava 173', 'Žlutava', '763 61', '00420 724986873', '', '', '', '', 1, 1)
--INSERT INTO AddressList(AddressType, CompanyName, ContactName, Street, City, PostCode, Phone, Email, BankAccount, Ico, Dic, UserId, Active)
--VALUES ('all', 'GroupWare-Solution.Eu', 'Libor Svoboda', 'Žlutava 173', 'Žlutava', '763 61', '00420 724986873', '', '', '', '', 1, 1)
-- CLONE TABLE with DATA WITHOUT KEYS AND INDEXES
--SELECT * INTO [GLOBAL].[dbo].[ItemList] FROM [SHOPINGER].[dbo].[ItemList]
--COPY DATA FTOM TABLE TO ANOTHER TABLE
--INSERT INTO [dbo].[ServerDynamicApiSecurityList] (
--[InheritedApiType], [Name], [Description], [UrlSubPath], [AllowedRoles],
--[RestrictedAccess], [RedirectPathOnError], [Active], [UserId]
--) SELECT
--[InheritedPageType],
--[Name],[Description],[UrlSubPath],[AllowedRoles],[RestrictedAccess],[RedirectPathOnError],[Active],[UserId]
--DELETE FROM [dbo].[ServerModuleAndServiceList]
--Where InheritedPageType = 'ServerApi'
--CLONE TABLE
--DBCC CLONEDATABASE (source_database_name, target_database_name)[WITH [NO_STATISTICS][,NO_QUERYSTORE]]
----BACKUP
--USE[SHOPINGER]
--DROP USER [shopinger];
--DBCC SHRINKFILE (SHOPINGER_log, 1);
--BACKUP DATABASE [SHOPINGER] TO DISK = N'C:\Database\SHOPINGER.bak'
--DBCC SHRINKFILE (SHOPINGER_log, 1);
--BACKUP DATABASE [SHOPINGER] TO DISK = N'C:\Database\SHOPINGER.bak'
--GO
--USE [SHOPINGER]
--BEGIN TRY CREATE USER [shopinger] FOR LOGIN [shopinger] END TRY BEGIN CATCH END CATCH;
--BEGIN TRY ALTER ROLE [db_datareader] ADD MEMBER [shopinger]; END TRY BEGIN CATCH END CATCH;
----RESTORE TO NEW FILES
--ALTER DATABASE [SHOPINGER] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
--RESTORE DATABASE [SHOPINGER] FROM DISK = N'C:\Database\SHOPINGER.bak'
--WITH MOVE N'SHOPINGER' TO N'C:\Database\SHOPINGER.mdf',
-- MOVE N'SHOPINGER_log' TO N'C:\Database\SHOPINGER_log.ldf', FILE = 2,
--RECOVERY, REPLACE, STATS = 10;
--ALTER DATABASE [SHOPINGER] SET MULTI_USER;
--COPY DATA FROM TABLE TO TABLE
--INSERT INTO newTable
--SELECT * FROM oldTable
-- Shadow Copy original table to create new with data NEW: ProdGuidGroupList , original :GroupList
--SELECT * INTO [EASYDATACenter].[dbo].[ProdGuidGroupList1] FROM [VYKONY].dbo.GroupList
COMMIT TRANSACTION
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
END CATCH
END;
SP SpOperationFillTranslationTableList
CREATE procedure [dbo].[SpOperationFillTranslationTableList]
AS
BEGIN
DECLARE @tableList TABLE (RowID int not null identity(1,1) primary key,[TableName] nvarchar(250) NOT NULL);
DECLARE @columnList TABLE ([ColumnName] nvarchar(250) NOT NULL);
DECLARE @resultList TABLE ([SystemName] nvarchar(50) NOT NULL);
--GET ALL TABLES
INSERT INTO @tableList ([TableName])
SELECT TABLE_NAME as 'TableList'
FROM INFORMATION_SCHEMA.TABLES
WHERE table_type = 'BASE TABLE'
UNION
--GET ALL VIEWS
SELECT
TABLE_NAME as 'TableList'
FROM INFORMATION_SCHEMA.VIEWS;
--START Save For Result
INSERT INTO @resultList ( [SystemName])
SELECT LOWER(LEFT(T1.[TableName],1))+SUBSTRING(T1.[TableName],2,LEN(T1.[TableName])) FROM @tableList T1
where NOT EXISTS (SELECT 1 FROM [dbo].[SystemTranslationList] T2 where T2.[SystemName] = T1.TableName);
--END Save For Result
INSERT INTO [dbo].[SystemTranslationList] ( [SystemName],[UserId])
SELECT LOWER(LEFT(T1.[TableName],1))+SUBSTRING(T1.[TableName],2,LEN(T1.[TableName])),1 FROM @tableList T1
where NOT EXISTS (SELECT 1 FROM [dbo].[SystemTranslationList] T2 where T2.[SystemName] = T1.TableName);
declare @i int;declare @max int;
select @i = min(RowID) from @tableList;
select @max = max(RowID) from @tableList;
DECLARE @columnName varchar(255);
WHILE @i <= @max BEGIN
SELECT @columnName = [TableName] FROM @tableList where RowID = @i;
INSERT INTO @columnList ([ColumnName])
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS T1
WHERE TABLE_NAME = @columnName;
SET @i = @i + 1
END
--START Save For Result
INSERT INTO @resultList ( [SystemName])
SELECT DISTINCT LOWER(LEFT(T1.[ColumnName],1))+SUBSTRING(T1.[ColumnName],2,LEN(T1.[ColumnName])) FROM @columnList T1
WHERE NOT EXISTS (SELECT 1 FROM [dbo].[SystemTranslationList] T2 WHERE T2.[SystemName] = T1.[ColumnName]);
--END Save For Result
INSERT INTO [dbo].[SystemTranslationList] ( [SystemName],[UserId])
SELECT DISTINCT LOWER(LEFT(T1.[ColumnName],1))+SUBSTRING(T1.[ColumnName],2,LEN(T1.[ColumnName])),1 FROM @columnList T1
WHERE NOT EXISTS (SELECT 1 FROM [dbo].[SystemTranslationList] T2 WHERE T2.[SystemName] = T1.[ColumnName]);
--Copy Translation from xxxListPage to xxxList
UPDATE TargetTbl
SET
TargetTbl.DescriptionCz = SourceTbl.DescriptionCz,
TargetTbl.DescriptionEn = SourceTbl.DescriptionEn
FROM
[dbo].[SystemTranslationList] AS TargetTbl
INNER JOIN [dbo].[SystemTranslationList] AS SourceTbl
ON SourceTbl.SystemName = CONCAT(TargetTbl.SystemName,'Page')
WHERE
LEN(TargetTbl.DescriptionCz) = 0 AND
SourceTbl.SystemName LIKE '%ListPage'
--Return List Of New Translation Words
--SELECT * FROM @resultList;
SELECT 'Update TranslationList From DB Schema is Completed' as 'MessageList';
END;
SP SpShowDBProcedureList
CREATE procedure [dbo].[SpShowDBProcedureList]
AS
BEGIN
SELECT SO.[type_desc], SO.[name], SM.[definition],SO.create_date,SO.modify_date
FROM sys.sql_modules SM INNER JOIN sys.Objects SO ON SM.Object_id = SO.Object_id
--WHERE SO.[type_desc] = 'SP'
ORDER BY SO.[type_desc], SO.[name];
;
END;
SP SpImportSvgIcon
CREATE PROCEDURE [dbo].[SpImportSvgIcon] (
@IconName NVARCHAR (100)
, @ImageFullPath NVARCHAR (1000)
)
AS
BEGIN
DECLARE @tsql NVARCHAR (2000);
SET NOCOUNT ON
SET @tsql = 'INSERT INTO SystemSvgIconList ([Name],[UserId], [SvgIconPath]) ' +
' SELECT ' + '''' + @IconName + '''' + ',1, * ' +
'FROM Openrowset( Bulk ' + '''' + @ImageFullPath + '''' + ', Single_Blob) as img'
EXEC (@tsql)
SET NOCOUNT OFF
END
SP SpProvider_SendSqlScript
-- Its Procedure From Provider To Customer
-- @TargetLinkedDb must be In Format: 95.183.52.33 or 95.183.52.33,1433 or SNRJDI\SLAMANAGEMENT
CREATE procedure [dbo].[SpProvider_SendSqlScript](@TargetIp varchar(255),@TargetDBName varchar(255),
@UserName varchar(255),@Password varchar(255),@TableName varchar(255)
)
AS
BEGIN
DECLARE @result as varchar(max);SET @result = 'Distribution SQLScript: ' + CHAR(13)+CHAR(10);
DECLARE @stepNo as int = 0;DECLARE @SqlScript as VARCHAR(MAX) ='';
SET @result +=CAST(@stepNo AS VARCHAR(10)) + ' Start Setting Linked Server' + CHAR(13)+CHAR(10);
BEGIN TRY
BEGIN TRY EXEC sp_addlinkedserver @server = @TargetIp, @srvproduct=N'SQL Server'; END TRY BEGIN CATCH END CATCH;
--EXEC sp_addlinkedserver @server = @TargetIp, @srvproduct=N'SQL Server', @provider=N'SQLNCLI';
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = @TargetIp, @locallogin=N'easyitcenter', @useself=N'True', @rmtuser=NULL, @rmtpassword=NULL;
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = @TargetIp, @locallogin = NULL , @useself = N'False', @rmtuser = N'sa', @rmtpassword = N'Hotel2023+'
SET @result +=CAST(@stepNo AS VARCHAR(10)) + ' Setting Linked Server OK' + CHAR(13)+CHAR(10);
END TRY
BEGIN CATCH SELECT @result += CONCAT(CAST(@stepNo AS VARCHAR(10)) + ' Error No: ',ERROR_NUMBER(),' = Process Jumped',CHAR(13)+CHAR(10), ERROR_MESSAGE(),CHAR(13)+CHAR(10)+CHAR(13)+CHAR(10)); END CATCH;
SET @stepNo += 10;
SET @result += CAST(@stepNo AS VARCHAR(10)) + ' Start Preparing Script' + CHAR(13)+CHAR(10);
BEGIN TRY
DECLARE @TableDefinitionList TABLE (RowNum int IDENTITY (1, 1) Primary key NOT NULL, [Template] text NULL);
INSERT INTO @TableDefinitionList([Template]) EXEC sp_GetDDL @TableName;
SELECT @SqlScript = [Template] FROM @TableDefinitionList WHERE RowNum = 1;
SET @SqlScript = REPLACE(@SqlScript,'','''');
SET @SqlScript = REPLACE(@SqlScript,' GO','');
SET @result += CAST(@stepNo AS VARCHAR(10)) + ' Preparing Script OK' + CHAR(13)+CHAR(10);
END TRY
BEGIN CATCH SELECT @result += CONCAT(CAST(@stepNo AS VARCHAR(10)) + ' Error No: ',ERROR_NUMBER(),' = Process Jumped',CHAR(13)+CHAR(10), ERROR_MESSAGE(),CHAR(13)+CHAR(10)+CHAR(13)+CHAR(10)); END CATCH;
SET @stepNo += 10;
SET @result +=CAST(@stepNo AS VARCHAR(10)) + ' Start Executing Script' + CHAR(13)+CHAR(10);
BEGIN TRY
DECLARE @TablePart AS VARCHAR(MAX) ='';
DECLARE @TriggerPart AS VARCHAR(MAX) ='';
PRINT @SqlScript;
SELECT @TablePart = SUBSTRING(@SqlScript,0,CHARINDEX('TRIGGER',@SqlScript,0)), @TriggerPart = SUBSTRING(@SqlScript,CHARINDEX('TRIGGER',@SqlScript,0)+1,LEN(@SqlScript));
EXEC (@TablePart);
EXEC (@TriggerPart);
SET @result +=CAST(@stepNo AS VARCHAR(10)) + ' Executing Script OK' + CHAR(13)+CHAR(10);
END TRY
BEGIN CATCH SELECT @result += CONCAT(CAST(@stepNo AS VARCHAR(10)) + ' Error No: ',ERROR_NUMBER(),' = Process Jumped',CHAR(13)+CHAR(10), ERROR_MESSAGE(),CHAR(13)+CHAR(10)+CHAR(13)+CHAR(10)); END CATCH;
SET @stepNo += 10;
SET @result +=CAST(@stepNo AS VARCHAR(10)) + ' Process Done' + CHAR(13)+CHAR(10);
SELECT @result as 'MessageList';
END;
PRINT CONCAT('SQL Distribution Script Result: ', CHAR(13)+CHAR(10),@result);-- as 'MessageList';
SP SpOperationRunSqlScript
CREATE procedure [dbo].[SpOperationRunSqlScript](@sqlScript varchar(MAX))
AS
BEGIN
DECLARE @result VARCHAR(MAX) = '';
BEGIN TRY
EXEC (@sqlScript);
END TRY
BEGIN CATCH SELECT @result = CONCAT('Error No: ',ERROR_NUMBER(),CHAR(13)+CHAR(10), ERROR_MESSAGE()); END CATCH;
PRINT @result;
END;
SP SpOperationAutoGenDescToDocs
CREATE procedure [dbo].[SpOperationAutoGenDescToDocs]
AS
BEGIN
DECLARE @Error VarChar(MAX);
DECLARE @RazorPortal VarChar(MAX);
DECLARE @PreparedNewsList VarChar(MAX); DECLARE @ProcessingTaskList VarChar(MAX); DECLARE @ChangeLogList VarChar(MAX);
DECLARE @GroupId Int;DECLARE @Name VarChar(50);DECLARE @Description VarChar(Max);DECLARE @Template VarChar(Max);
DECLARE @PrewTargetType VarChar(150);DECLARE @TargetType VarChar(150); DECLARE @StatusType VarChar(150); DECLARE @Value VarChar(150);
DECLARE @Request VarChar(MAX); DECLARE @Documentation VarChar(MAX); DECLARE @Image VarBinary(Max);
--Generate RazorPortalAutoDoc
BEGIN TRY
DECLARE db_cursor1 CURSOR LOCAL FOR SELECT dtl.[GroupId],dtl.[Name],dtl.[Description],dtl.[Template] FROM [dbo].[DocSrvDocTemplateList] dtl WHERE dtl.Name LIKE '%cshtml%'
SET @RazorPortal = char(13) + '# Úplný kód MVC Razor Portálu CSHTML, ' + char(13) + char(13) + 's JS,Metro4, nutný Build,Vývoj 1 Měsíc, nyní se již nepoužívá ' + char(13) + char(13) + char(13);
OPEN db_cursor1;
FETCH NEXT FROM db_cursor1 INTO @GroupId, @Name, @Description, @Template;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @RazorPortal += '### ' + @Name + '
' + char(13) + char(13) + '
```http
' + char(13) + @Template + char(13) + '
' + char(13) + '
' + char(13) + char(13);
FETCH NEXT FROM db_cursor1 INTO @GroupId, @Name, @Description, @Template;
END;
CLOSE db_cursor1;
DEALLOCATE db_cursor1;
--SAVE RazorPortalAutoDoc
INSERT INTO [dbo].[DocSrvDocumentationList] ([DocumentationGroupId],[Name], [Description],[Sequence],[MdContent],[HtmlContent],[UserId],[Active],[AutoVersion])
VALUES(@GroupId,'Zrušený MVC Web Portal CsHtml','Je možné Vytěžit Generátory kódu a Objekty Metro4',100,@RazorPortal,@RazorPortal,1,1,1);
END TRY
BEGIN CATCH
SELECT @Error = CONCAT('RazorPortalAutoDoc',' ,ErrNo:',CAST(ERROR_NUMBER() AS VARCHAR),' ,Message:',ERROR_MESSAGE());
INSERT INTO [dbo].[SolutionFailList] ([Source],[Message]) VALUES('Database', @Error);
END CATCH;
--Generate XamlAutoDoc
BEGIN TRY
DECLARE db_cursor2 CURSOR LOCAL FOR SELECT dtl.[GroupId],dtl.[Name],dtl.[Description],dtl.[Template] FROM [dbo].[DocSrvDocTemplateList] dtl WHERE dtl.Name LIKE '%XAML%'
SET @RazorPortal = char(13) + '# ESB -WPF XAML Šablony,
' + char(13) + char(13) + ' Standardní I mediální šablony pro Vývoj Systému ' + char(13) + char(13) + char(13); OPEN db_cursor2; FETCH NEXT FROM db_cursor2 INTO @GroupId, @Name, @Description, @Template;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @RazorPortal += '### ' + @Name + '
' + char(13) + char(13) + '
' + char(13) + @Template + char(13) + '
' + char(13) + '
' + char(13) + char(13);
FETCH NEXT FROM db_cursor2 INTO @GroupId, @Name, @Description, @Template;
END;
CLOSE db_cursor2;
DEALLOCATE db_cursor2;
--SAVE XAMLTemplatesAutoDoc
INSERT INTO [dbo].[DocSrvDocumentationList] ([DocumentationGroupId],[Name], [Description],[Sequence],[MdContent],[HtmlContent],[UserId],[Active],[AutoVersion])
VALUES(@GroupId,'XAML Šablony Systému','Těchto pár Šablon Stačí na tvorbu Multimediálního Systému',300,@RazorPortal,@RazorPortal,1,1,1);
END TRY
BEGIN CATCH
SELECT @Error = CONCAT('XAMLTemplatesAutoDoc',' ,ErrNo:',CAST(ERROR_NUMBER() AS VARCHAR),' ,Message:',ERROR_MESSAGE());
INSERT INTO [dbo].[SolutionFailList] ([Source],[Message]) VALUES('Database', @Error);
END CATCH;
--Generate C#APIAutoDoc
BEGIN TRY
DECLARE db_cursor3 CURSOR LOCAL FOR SELECT dtl.[GroupId],dtl.[Name],dtl.[Description],dtl.[Template] FROM [dbo].[DocSrvDocTemplateList] dtl WHERE dtl.Name LIKE '%C# API%'
SET @RazorPortal = char(13) + '# EIC- C# API Šablony,
' + char(13) + char(13) + 'Standardní C# API pro Vývoj Babkend APi Služeb
' + char(13) + char(13) + char(13);
OPEN db_cursor3;
FETCH NEXT FROM db_cursor3 INTO @GroupId, @Name, @Description, @Template;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @RazorPortal += '### ' + @Name + '
' + char(13) + char(13) + '
' + char(13) + @Template + char(13) + '
' + char(13) + '
' + char(13) + char(13);
FETCH NEXT FROM db_cursor3 INTO @GroupId, @Name, @Description, @Template;
END;
CLOSE db_cursor3;
DEALLOCATE db_cursor3;
--SAVE C#APITemplatesAutoDoc
INSERT INTO [dbo].[DocSrvDocumentationList] ([DocumentationGroupId],[Name], [Description],[Sequence],[MdContent],[HtmlContent],[UserId],[Active],[AutoVersion])
VALUES(@GroupId,'API Šablony Systému','Těchto pár Šablon Stačí na tvorbu Libovolného Backend Serveru',300,@RazorPortal,@RazorPortal,1,1,1);
END TRY
BEGIN CATCH
SELECT @Error = CONCAT('APITemplatesAutoDoc',' ,ErrNo:',CAST(ERROR_NUMBER() AS VARCHAR),' ,Message:',ERROR_MESSAGE());
INSERT INTO [dbo].[SolutionFailList] ([Source],[Message]) VALUES('Database', @Error);
END CATCH;
--Generate DBTablesAutoDoc
BEGIN TRY
DECLARE db_cursor4 CURSOR LOCAL FOR SELECT dtl.[GroupId],dtl.[Name],dtl.[Description],dtl.[Template] FROM [dbo].[DocSrvDocTemplateList] dtl WHERE dtl.[Description] LIKE 'TABLE';
SET @RazorPortal = char(13) + '# DB - Export Tabulek Řešení,
' + char(13) + char(13) + 'Zde najdete Všechny Tabulky Řešení, Struktura má Centrální Logiku, která zamezuje vzniku chyb
' + char(13) + char(13) + char(13);
OPEN db_cursor4;
FETCH NEXT FROM db_cursor4 INTO @GroupId, @Name, @Description, @Template;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @RazorPortal += '### ' + @Name + '
' + char(13) + '
' + char(13) + @Template + char(13) + '
' + char(13) + '
' + char(13) + char(13);
FETCH NEXT FROM db_cursor4 INTO @GroupId, @Name, @Description, @Template;
END;
CLOSE db_cursor4;
DEALLOCATE db_cursor4;
--SAVE DBTablesAutoDoc
INSERT INTO [dbo].[DocSrvDocumentationList] ([DocumentationGroupId],[Name], [Description],[Sequence],[MdContent],[HtmlContent],[UserId],[Active],[AutoVersion])
VALUES(@GroupId,'DB Tabulky Řešení','Struktura Tabulek te stále Téměř totožná, Pár Pravidel stačí k vytvoření dokonalého Systému',100,@RazorPortal,@RazorPortal,1,1,1);
END TRY
BEGIN CATCH
SELECT @Error = CONCAT('DBTablesAutoDoc',' ,ErrNo:',CAST(ERROR_NUMBER() AS VARCHAR),' ,Message:',ERROR_MESSAGE());
INSERT INTO [dbo].[SolutionFailList] ([Source],[Message]) VALUES('Database', @Error);
END CATCH;
--Generate DBProceduresAutoDoc
BEGIN TRY
DECLARE db_cursor5 CURSOR LOCAL FOR SELECT dtl.[GroupId],dtl.[Name],dtl.[Description],dtl.[Template] FROM [dbo].[DocSrvDocTemplateList] dtl WHERE dtl.[Description] LIKE 'SQL_STORED_PROCEDURE';
SET @RazorPortal = char(13) + '# DB - Export Procedur Řešení,
' + char(13) + char(13) + 'Zde procedury pro automatizaci, Hromadné Operace, Správu DB
' + char(13) + char(13) + char(13);
OPEN db_cursor5;
FETCH NEXT FROM db_cursor5 INTO @GroupId, @Name, @Description, @Template;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @RazorPortal += '### ' + @Name + '
' + char(13) + '
' + char(13) + @Template + char(13) + '
' + char(13) + '
' + char(13) + char(13);
FETCH NEXT FROM db_cursor5 INTO @GroupId, @Name, @Description, @Template;
END;
CLOSE db_cursor5;
DEALLOCATE db_cursor5;
--SAVE DBProceduresAutoDoc
INSERT INTO [dbo].[DocSrvDocumentationList] ([DocumentationGroupId],[Name], [Description],[Sequence],[MdContent],[HtmlContent],[UserId],[Active],[AutoVersion])
VALUES(@GroupId,'DB Procedury Řešení','Vytvořené procedury pro automatizaci, Hromadné Operace, Správu DB',200,@RazorPortal,@RazorPortal,1,1,1);
END TRY
BEGIN CATCH
SELECT @Error = CONCAT('DBProceduresAutoDoc',' ,ErrNo:',CAST(ERROR_NUMBER() AS VARCHAR),' ,Message:',ERROR_MESSAGE());
INSERT INTO [dbo].[SolutionFailList] ([Source],[Message]) VALUES('Database', @Error);
END CATCH;
--Generate DBTriggersAutoDoc
BEGIN TRY
DECLARE db_cursor6 CURSOR LOCAL FOR SELECT dtl.[GroupId],dtl.[Name],dtl.[Description],dtl.[Template] FROM [dbo].[DocSrvDocTemplateList] dtl WHERE dtl.[Description] LIKE 'SQL_TRIGGER';
SET @RazorPortal = char(13) + '# DB - Export Procedur Řešení,
' + char(13) + 'Zde najdete procedury, které stanovují pevnou a jasnou strukturu a vazby již v databázi
' + char(13) + char(13) + char(13);
OPEN db_cursor6;
FETCH NEXT FROM db_cursor6 INTO @GroupId, @Name, @Description, @Template;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @RazorPortal += '### ' + @Name + '
' + char(13) + char(13) + '
' + char(13) + @Template + char(13) + '
' + char(13) + '
' + char(13);
FETCH NEXT FROM db_cursor6 INTO @GroupId, @Name, @Description, @Template;
END;
CLOSE db_cursor6;
DEALLOCATE db_cursor6;
--SAVE DBTriggersAutoDoc
INSERT INTO [dbo].[DocSrvDocumentationList] ([DocumentationGroupId],[Name], [Description],[Sequence],[MdContent],[HtmlContent],[UserId],[Active],[AutoVersion])
VALUES(@GroupId,'DB Triggery','Základem je nastavit pevnou a jasnou strukturu a vazby již v databázi',300,@RazorPortal,@RazorPortal,1,1,1);
END TRY
BEGIN CATCH
SELECT @Error = CONCAT('DBTriggersAutoDoc',' ,ErrNo:',CAST(ERROR_NUMBER() AS VARCHAR),' ,Message:',ERROR_MESSAGE());
INSERT INTO [dbo].[SolutionFailList] ([Source],[Message]) VALUES('Database', @Error);
END CATCH;
--Generate DBViewAutoDoc
BEGIN TRY
DECLARE db_cursor7 CURSOR LOCAL FOR SELECT dtl.[GroupId],dtl.[Name],dtl.[Description],dtl.[Template] FROM [dbo].[DocSrvDocTemplateList] dtl WHERE dtl.[Description] LIKE 'VIEW'
OR dtl.[Description] LIKE 'SQL_SCALAR_FUNCTION' OR dtl.[Description] LIKE 'SQL_INLINE_TABLE_VALUED_FUNCTION';
SET @RazorPortal = char(13) + '# DB - Export Views a Funkcí Řešení,
' + char(13) + 'Zde najdete složené Datapohledy a Funkce
' + char(13) ;
OPEN db_cursor7;
FETCH NEXT FROM db_cursor7 INTO @GroupId, @Name, @Description, @Template;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @RazorPortal += '### ' + @Name + '
' + char(13) + '
``` ' + char(13) + '
---
' + char(13) + char(13);
FETCH NEXT FROM db_cursor7 INTO @GroupId, @Name, @Description, @Template;
END;
CLOSE db_cursor7;
DEALLOCATE db_cursor7;
--SAVE DBViewsAutoDoc
INSERT INTO [dbo].[DocSrvDocumentationList] ([DocumentationGroupId],[Name], [Description],[Sequence],[MdContent],[HtmlContent],[UserId],[Active],[AutoVersion])
VALUES(@GroupId,'DB View a Funkce','Složené Datapohledy a Funkce',400,@RazorPortal,@RazorPortal,1,1,1);
END TRY
BEGIN CATCH
SELECT @Error = CONCAT('DBViewsAutoDoc',' ,ErrNo:',CAST(ERROR_NUMBER() AS VARCHAR),' ,Message:',ERROR_MESSAGE());
INSERT INTO [dbo].[SolutionFailList] ([Source],[Message]) VALUES('Database', @Error);
END CATCH;
--END OF EXPORT TEMPLATES
--START EXPORT PREPARED NEWS / CHANGELOG
--Generate Prepared News, Processing, ChangeLog
BEGIN TRY
DECLARE db_cursor8 CURSOR LOCAL FOR SELECT stl.[InheritedTargetType],stl2.DescriptionCz,stl.[Message], stl.[Documentation], stl.[Image]
FROM [dbo].[SolutionTaskList] stl, [dbo].[SystemTranslationList] stl2
WHERE stl.[InheritedStatusType] = stl2.SystemName AND stl.[InheritedStatusType] = 'Waiting'
ORDER BY stl.[InheritedTargetType];
-- CASE stl.[InheritedStatusType]
-- WHEN 'Done' THEN 1
-- WHEN 'Upgrading' THEN 2
-- WHEN 'Processing' THEN 2
-- WHEN 'Waiting' THEN 3
-- ELSE 4
-- END ASC,
-- stl.[TimeStamp];
SET @PreparedNewsList = char(13) + '# Připravované Novinky,
' + char(13) + char(13) + 'Zde je seznam dalších chystaných funkcionalit, které posouvá vývoj.
To Hlavní Je přípravaWeb Portálu ONLINE s Vývojem kódu Mnanagovaným Centrálním Řešením.
to Nabízí Vždy aktializace po ruce Obosměrné rozšiřování Projektů a Centralizaci Agend.
Tím z tohoto řešení Bude Nejlevnější IT šeření Tak Rozsáhlého Charakteru.
' + char(13) + char(13) + char(13);
OPEN db_cursor8
FETCH NEXT FROM db_cursor8 INTO @TargetType, @StatusType, @Request, @Documentation ,@Image
WHILE @@FETCH_STATUS = 0
BEGIN
IF(@PrewTargetType <> @TargetType) BEGIN
SET @PreparedNewsList += '
--- ' + char(13) + '### ' + @TargetType + '
' + char(13);
END
SET @PreparedNewsList +='1. ' + @Request + char(13);
SET @PrewTargetType = @TargetType;
FETCH NEXT FROM db_cursor8 INTO @TargetType, @StatusType, @Request, @Documentation ,@Image
END;
CLOSE db_cursor8;
DEALLOCATE db_cursor8;
--SAVE Prepared News
INSERT INTO [dbo].[DocSrvDocumentationList] ([DocumentationGroupId],[Name], [Description],[Sequence],[MdContent],[HtmlContent],[UserId],[Active],[AutoVersion])
VALUES(7,'Připravované Novinky','Seznam nejprioritnějších Rozšíření Systému. Ty budou zaimlemetovány během 6 měsíců
protože se tomu můžu věnovat jen ve volném čase. Nejen Itéčkáři v naší zemi se místo vzdělávání soustředí jak pěníze čerpat
místo tvořit přidanými hodnotami své činnosti. Připraveno je jíž přes více jak 500 vylepšení. Stačí stahovat z Github.
',30,@PreparedNewsList,@PreparedNewsList,1,1,1);
END TRY
BEGIN CATCH
SELECT @Error = CONCAT('PreparedNews',' ,ErrNo:',CAST(ERROR_NUMBER() AS VARCHAR),' ,Message:',ERROR_MESSAGE());
INSERT INTO [dbo].[SolutionFailList] ([Source],[Message]) VALUES('Database', @Error);
END CATCH
--Generate Processing, ChangeLog
BEGIN TRY
DECLARE db_cursor9 CURSOR LOCAL FOR SELECT stl.[InheritedTargetType],stl2.DescriptionCz,stl.[Message], stl.[Documentation], stl.[Image]
FROM [dbo].[SolutionTaskList] stl, [dbo].[SystemTranslationList] stl2
WHERE stl.[InheritedStatusType] = stl2.SystemName AND stl.[InheritedStatusType] <> 'Waiting'
ORDER BY stl.[InheritedStatusType], stl.[InheritedTargetType];
SET @PreparedNewsList = char(13) + '# Zpracovávané a zpracované Funkcionality,
' + char(13) + char(13) + 'Zde je vypsána ani setina toho co vše Dané projekty Umí.
Myslím že chystaný vývoj Online z Webu a Editorů mluví za vše. Tak neplýtvejte financemi na
čas zaměstanců či jiná řešení A Vyzkoušejte 30 denní verzu zdarma.
' + char(13) + char(13) + char(13);
OPEN db_cursor9
FETCH NEXT FROM db_cursor9 INTO @TargetType, @StatusType, @Request, @Documentation ,@Image
WHILE @@FETCH_STATUS = 0
BEGIN
IF(@PrewTargetType <> @TargetType) BEGIN
SET @PreparedNewsList += char(13) + '### ' + @TargetType + '
' + char(13);
END
SET @PreparedNewsList +='**' + @StatusType + '**
' + '1. ' + @Request + char(13) + '- ' + @Documentation + char(13) + char(13) + '
---
' + char(13);
SET @PrewTargetType = @TargetType;
FETCH NEXT FROM db_cursor9 INTO @TargetType, @StatusType, @Request, @Documentation ,@Image
END;
CLOSE db_cursor9;
DEALLOCATE db_cursor9;
--SAVE Changelog
INSERT INTO [dbo].[DocSrvDocumentationList] ([DocumentationGroupId],[Name], [Description],[Sequence],[MdContent],[HtmlContent],[UserId],[Active],[AutoVersion])
VALUES(7,'Zpracováváné A ChangeLog','Changelog jsem začal prat teprve ted. Každý úsek který vidíte, je výsledkem 2dnů práce macimálně.
Pro představu co vše se dá zvládnout. Vyzkoušejte nebo požádejte o instalaci u vás ve firměš či doma a zkuste
vyzkoušet vo vše dané řešení nabízí. ',800,@PreparedNewsList,@PreparedNewsList,1,1,1);
END TRY
BEGIN CATCH
SELECT @Error = CONCAT('Changelog',' ,ErrNo:',CAST(ERROR_NUMBER() AS VARCHAR),' ,Message:',ERROR_MESSAGE());
INSERT INTO [dbo].[SolutionFailList] ([Source],[Message]) VALUES('Database', @Error);
END CATCH
--GenerateServerConfig
BEGIN TRY
DECLARE db_cursor11 CURSOR LOCAL FOR SELECT sl.InheritedGroupName,sl.[Key],sl.[Description]
FROM [dbo].[ServerSettingList] sl
ORDER BY sl.InheritedGroupName;
SET @PreparedNewsList = char(13) + '# Základní Konfigurace Serveru,
' + char(13) + char(13) + 'Zde je Aktuální základní konfigurace serveru.Jsou do ní vytažené jen ty nejstěžejnější
nastavení, protože k dispozici sich je stonásobně víckrát.
To Vyplývá z počtu přes 100 nasazených technologií v 1 řešení parfekně vyladěných pro dokonalou práci.
' + char(13);
OPEN db_cursor11
FETCH NEXT FROM db_cursor11 INTO @TargetType, @StatusType, @Documentation
WHILE @@FETCH_STATUS = 0
BEGIN
IF(@PrewTargetType <> @TargetType) BEGIN
SET @PreparedNewsList += + char(13) + '
---
' + char(13) + '# ' + @TargetType + '
' + char(13);
END
SET @PreparedNewsList +='**' + @StatusType + '**
' + char(13) + '- ' + @Documentation + char(13) + char(13);
SET @PrewTargetType = @TargetType;
FETCH NEXT FROM db_cursor11 INTO @TargetType, @StatusType,@Documentation
END;
CLOSE db_cursor11;
DEALLOCATE db_cursor11;
--SAVE GenerateServerConfig
INSERT INTO [dbo].[DocSrvDocumentationList] ([DocumentationGroupId],[Name], [Description],[Sequence],[MdContent],[HtmlContent],[UserId],[Active],[AutoVersion])
VALUES(2,'Základní Konfigurace Serveru','Zde je Výčet Konfigurace serveru a popis co dané volby Dělají a znamenají.
Když si je namalujete do pavouka zjistíte že to výkrývá téměř celé IT.',30,@PreparedNewsList,@PreparedNewsList,1,1,1);
END TRY
BEGIN CATCH
SELECT @Error = CONCAT('GenerateServerConfig',' ,ErrNo:',CAST(ERROR_NUMBER() AS VARCHAR),' ,Message:',ERROR_MESSAGE());
INSERT INTO [dbo].[SolutionFailList] ([Source],[Message]) VALUES('Database', @Error);
END CATCH
--GenerateAgendasList
BEGIN TRY
DECLARE db_cursor12 CURSOR LOCAL FOR SELECT sg.SystemName,sm.MenuType,sm.FormPageName, sm.[Description]
FROM [dbo].[SystemMenuList] sm, [dbo].[SystemGroupMenuList] sg
WHERE sg.Id = sm.GroupId
ORDER BY sg.SystemName, CASE sm.MenuType
WHEN 'Dial' THEN 1
WHEN 'Agenda' THEN 2
ELSE 3
END;
SET @PreparedNewsList = char(13) + '# Seznam Implementovaných Agend,
' + char(13) + char(13) + 'Zde je Seznam implementovaných Agend Systému. Systém je aktuálně zaměřen na Správu IT, a všeho Okolo.
Je Modifikován tak Aby zvládnul všechny možné typy požadavků. Upravit sio je pro Svá data je otázkou v řádech týdnů, protože
disponuje všemi možnými nástroji pro zpracování každého typu požadavku.
' + char(13);
OPEN db_cursor12
FETCH NEXT FROM db_cursor12 INTO @TargetType, @StatusType,@Value, @Documentation
WHILE @@FETCH_STATUS = 0
BEGIN
IF(@PrewTargetType <> @TargetType) BEGIN
SET @PreparedNewsList += + char(13) + '
---
' + char(13) + '# ' + @TargetType + '
' + char(13);
END
SET @PreparedNewsList +='- ' + @StatusType + ' **' + @Value + '**
' + char(13) + '*' + @Documentation + '*' + char(13) + '
``` ' + char(13);
SET @PrewTargetType = @TargetType;
FETCH NEXT FROM db_cursor12 INTO @TargetType, @StatusType,@Value, @Documentation
END;
CLOSE db_cursor12;
DEALLOCATE db_cursor12;
--SAVE GenerateAgendasList
INSERT INTO [dbo].[DocSrvDocumentationList] ([DocumentationGroupId],[Name], [Description],[Sequence],[MdContent],[HtmlContent],[UserId],[Active],[AutoVersion])
VALUES(1,' Seznam Implementovaných Agend','Zde je Seznam implementovaných Agend Systému. Systém je aktuálně zaměřen na Správu IT, a všeho Okolo.
Je Modifikován tak Aby zvládnul všechny možné typy požadavků. Upravit sio je pro Svá data je otázkou v řádech týdnů, protože
disponuje všemi možnými nástroji pro zpracování každého požadavku.',30,@PreparedNewsList,@PreparedNewsList,1,1,1);
END TRY
BEGIN CATCH
SELECT @Error = CONCAT('GenerateAgendasList',' ,ErrNo:',CAST(ERROR_NUMBER() AS VARCHAR),' ,Message:',ERROR_MESSAGE());
INSERT INTO [dbo].[SolutionFailList] ([Source],[Message]) VALUES('Database', @Error);
END CATCH
--GenerateSystemModules
BEGIN TRY
DECLARE db_cursor13 CURSOR LOCAL FOR SELECT sm.ModuleType, sm.[Name], sm.[Description]
FROM [dbo].[SystemModuleList] sm
ORDER BY sm.ModuleType;
SET @PreparedNewsList = char(13) + '# Seznam ukázkových Modulů Systému,
' + char(13) + char(13) + 'Do Systému lze připojit libovolný Software, Libovolná Web Aplikace, či Libovolné Rozšíření,Framework atd.
To z něho Dělá naprostý Unikát. Webové Aplikace se tváří jako část Systému, Aplikace se ovírají Externě ale máte vše po ruce.
a Github nabízí Tisíce hotových řešení. Nestačí že Systém sám je už Systém Generátor a generuje Nové Agendy Skoro sám, ještě lze
připojit naprosto cokoliv. Systém má totiž v sobě na pozadí vlastní Web Server.
' + char(13);
OPEN db_cursor13
FETCH NEXT FROM db_cursor13 INTO @TargetType, @StatusType, @Documentation
WHILE @@FETCH_STATUS = 0
BEGIN
IF(@PrewTargetType <> @TargetType) BEGIN
SET @PreparedNewsList += + char(13) + '
---
' + char(13) + '# ' + @TargetType + '
' + char(13);
END
SET @PreparedNewsList +=' **' + @StatusType + '**
' + char(13) + '*' + @Documentation + '*' + char(13) + '
' + char(13);
SET @PrewTargetType = @TargetType;
FETCH NEXT FROM db_cursor13 INTO @TargetType, @StatusType, @Documentation
END;
CLOSE db_cursor13;
DEALLOCATE db_cursor13;
--SAVE GenerateSystemModules
INSERT INTO [dbo].[DocSrvDocumentationList] ([DocumentationGroupId],[Name], [Description],[Sequence],[MdContent],[HtmlContent],[UserId],[Active],[AutoVersion])
VALUES(1,'Seznam ukázkových Modulů Systému','Do Systému lze připojit libovolný Software, Libovolná Web Aplikace, či Libovolné Rozšíření,Framework atd.
To z něho Dělá naprostý Unikát. Webové Aplikace se tváří jako část Systému, Aplikace se ovírají Externě ale máte vše po ruce.
a Github nabízí Tisíce hotových řešení. Nestačí že Systém sám je už Systém Generátor a generuje Nové Agendy Skoro sám, ještě lze
připojit naprosto cokoliv. Systém má totiž v sobě na pozadí vlastní Web Server.',40,@PreparedNewsList,@PreparedNewsList,1,1,1);
END TRY
BEGIN CATCH
SELECT @Error = CONCAT('GenerateSystemModules',' ,ErrNo:',CAST(ERROR_NUMBER() AS VARCHAR),' ,Message:',ERROR_MESSAGE());
INSERT INTO [dbo].[SolutionFailList] ([Source],[Message]) VALUES('Database', @Error);
END CATCH
--GenerateServerModules
BEGIN TRY
DECLARE db_cursor14 CURSOR LOCAL FOR SELECT sm.[InheritedPageType], sm.[Name], sm.[Description]
FROM [dbo].[ServerModuleAndServiceList] sm
ORDER BY sm.[InheritedPageType];
SET @PreparedNewsList = char(13) + '# Seznam Implementovaných Modulů Serveru,
' + char(13) + char(13) + 'Do serveru lze zaimplementovat téměř neomezeně funkcionalit. Sám jich už má přehršel.
Je tu ale nová Dynamická agenda kde se nastavují přístupy k zaimplementovaným modulům, nebo je možné tvořit vlastní webové moduly
jako jednostánkové weby pro určitý Účel. ke snadnosti slouží knihovny kódů pomocí kterých tyto moduly můžete doslova Generovat
' + char(13);
OPEN db_cursor14
FETCH NEXT FROM db_cursor14 INTO @TargetType, @StatusType, @Documentation
WHILE @@FETCH_STATUS = 0
BEGIN
IF(@PrewTargetType <> @TargetType) BEGIN
SET @PreparedNewsList += + char(13) + '
---
' + char(13) + '# ' + @TargetType + '
' + char(13);
END
SET @PreparedNewsList +=' **' + @StatusType + '**
' + char(13) + '*' + @Documentation + '*' + char(13) + '
' + char(13);
SET @PrewTargetType = @TargetType;
FETCH NEXT FROM db_cursor14 INTO @TargetType, @StatusType, @Documentation
END;
CLOSE db_cursor14;
DEALLOCATE db_cursor14;
--SAVE GenerateServerModules
INSERT INTO [dbo].[DocSrvDocumentationList] ([DocumentationGroupId],[Name], [Description],[Sequence],[MdContent],[HtmlContent],[UserId],[Active],[AutoVersion])
VALUES(2,'Seznam Impl. Modulů Serveru','Do serveru lze zaimplementovat téměř neomezeně funkcionalit. Sám jich už má přehršel.
Je tu ale nová Dynamická agenda kde se nastavují přístupy k zaimplementovaným modulům, nebo je možné tvořit vlastní webové moduly
jako jednostánkové weby pro určitý Účel. ke snadnosti slouží knihovny kódů pomocí kterých tyto moduly můžete doslova Generovat',40,@PreparedNewsList,@PreparedNewsList,1,1,1);
END TRY
BEGIN CATCH
SELECT @Error = CONCAT('GenerateServerModules',' ,ErrNo:',CAST(ERROR_NUMBER() AS VARCHAR),' ,Message:',ERROR_MESSAGE());
INSERT INTO [dbo].[SolutionFailList] ([Source],[Message]) VALUES('Database', @Error);
END CATCH
--GenerateMicroDials
BEGIN TRY
DECLARE db_cursor15 CURSOR LOCAL FOR SELECT sm.ItemsGroup, sm.[Name], sm.[Description]
FROM [dbo].[SolutionMixedEnumList] sm
ORDER BY sm.ItemsGroup;
SET @PreparedNewsList = char(13) + '# Mikročíselníky unikátních Funcionalit,
' + char(13) + char(13) + 'Mikročíselník vzniknul jako úsporatabulek pro Výběry z malinkých seznamů. Tyto Seznamy
jsou ale implementované funkcionality, Systému i Serveru to z něho Dělá naprosto mimořádnou Agendu. Zde je Vypsán jeho
Obsah.
' + char(13);
OPEN db_cursor15
FETCH NEXT FROM db_cursor15 INTO @TargetType, @StatusType, @Documentation
WHILE @@FETCH_STATUS = 0
BEGIN
IF(@PrewTargetType <> @TargetType) BEGIN
SET @PreparedNewsList += + char(13) + '
---
' + char(13) + '# ' + @TargetType + '
' + char(13);
END
SET @PreparedNewsList +=' **' + @StatusType + '**
' + char(13) + '*' + @Documentation + '*' + char(13) + '
' + char(13);
SET @PrewTargetType = @TargetType;
FETCH NEXT FROM db_cursor15 INTO @TargetType, @StatusType, @Documentation
END;
CLOSE db_cursor15;
DEALLOCATE db_cursor15;
--SAVE GenerateMicroDials
INSERT INTO [dbo].[DocSrvDocumentationList] ([DocumentationGroupId],[Name], [Description],[Sequence],[MdContent],[HtmlContent],[UserId],[Active],[AutoVersion])
VALUES(1,'Mikročíselníky unikátní Funkce','Mikročíselník vzniknul jako úspora tabulek pro Výběry z malinkých seznamů. Tyto Seznamy
jsou ale implementované funkcionality, Systému i Serveru to z něho Dělá naprosto mimořádnou Agendu. Zde je Vypsán jeho
Obsah.',70,@PreparedNewsList,@PreparedNewsList,1,1,1);
SELECT 'Generate AutoDocs From Descriptions Completed' as 'MessageList';
END TRY
BEGIN CATCH
SELECT @Error = CONCAT('GenerateMicroDials',' ,ErrNo:',CAST(ERROR_NUMBER() AS VARCHAR),' ,Message:',ERROR_MESSAGE());
INSERT INTO [dbo].[SolutionFailList] ([Source],[Message]) VALUES('Database', @Error);
SELECT @Error as 'MessageList';
END CATCH
END;
SP _SpOperationTemplate
-- PROCEDURE TEMPLATE WITH LOGGING TO DATABASE FAILLIST
CREATE procedure [dbo].[SpOperationTemplate]
AS
BEGIN
DECLARE @Error VarChar(MAX);
--DO PROCESS
BEGIN TRY
SELECT 1;
-- PROCESS COMPLETED
SELECT 'Process Completed' as 'MessageList';
END TRY
BEGIN CATCH
SELECT @Error = CONCAT('ProcessIdentifier',' ,ErrNo:',CAST(ERROR_NUMBER() AS VARCHAR),' ,Message:',ERROR_MESSAGE());
INSERT INTO [dbo].[SolutionFailList] ([Source],[Message]) VALUES('Database', @Error);
-- PROCESS ERROR
SELECT @Error as 'MessageList';
END CATCH
END;
SP ExampleExportJsonFile
CREATE PROCEDURE [dbo].[ExampleExportJsonFile](@Json varchar(MAX) OUTPUT)
AS
BEGIN
---DECLARE @json VARCHAR (4000);
SET NOCOUNT ON
SET @Json = (SELECT [Key],[Value] FROM ServerSettingList FOR JSON PATH);-- '{"DatabaseConnectionString":""';
/*
SELECT
@Json += CASE
WHEN [Type] = 'bit' AND LOWER(ss.[Value]) = 'false' THEN CONCAT(',"', ss.[Key],'":False' )
WHEN [Type] = 'bit' AND LOWER(ss.[Value]) = 'true' THEN CONCAT(',"', ss.[Key],'":True')
WHEN [Type] = 'int' THEN CONCAT(',"', ss.[Key],'":', ss.[Value])
ELSE CONCAT(',"', ss.[Key],'":"', ss.[Value],'"')
END
FROM ServerSettingList AS ss;
*/
--SET @Json += '''';
SET NOCOUNT OFF
--SELECT * FROM OpenJson(@Json);
END
SP ReportDataset
CREATE PROCEDURE [dbo].[ReportDataset]
@TableName varchar(50) = null,
@Sequence int = 0
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Intended for use with param-ed reports.
-- To be called from various My-FyiReporting reports
-- - Various reports with their own layouts are called from VB app after setting Queue with usp_ReportQueue_Push()
-- each report then just contains :
-- SET FMTONLY OFF;
-- EXEC usp_ReportQueue_Pop @TableName='SomeTablename', @Sequence='10'
--
DECLARE @ID int;
DECLARE @NAME varchar(50);
DECLARE @SQL nvarchar(MAX);
DECLARE @FILTER nvarchar(MAX);
DECLARE @SEARCH varchar(50);
DECLARE @SEARCHCOLUMNLIST nvarchar(MAX);
DECLARE @SEARCHFILTERIGNORE bit;
DECLARE @RECID varchar(50);
DECLARE @RECIDFILTERIGNORE bit;
DECLARE @SEPARATEDCOLUMNS nvarchar(MAX);
SELECT Top 1
@ID=[Id],
@NAME=[Name],
@SQL=[Sql],
@FILTER=[Filter],
@SEARCH=[Search],
@SEARCHCOLUMNLIST=[SearchColumnList],
@SEARCHFILTERIGNORE=[SearchFilterIgnore],
@RECID=[RecId],
@RECIDFILTERIGNORE=[RecIdFilterIgnore]
FROM SystemReportQueueList WHERE [TableName]=@TableName AND [Sequence] = @Sequence;
--PRERARE RECID
IF (@RECID = 0 OR (@RECIDFILTERIGNORE = 1 AND @FILTER <> '1=1')) BEGIN
SET @RECID = ''
END ELSE BEGIN
SET @RECID = CONCAT(' AND Id=',@RECID);
END
--PRERARE SEARCH
IF (@SEARCH = '' OR (@SEARCHFILTERIGNORE = 1 AND @FILTER <> '1=1')) BEGIN
SET @SEPARATEDCOLUMNS = '1=1';
END ELSE BEGIN
SELECT @SEPARATEDCOLUMNS = STRING_AGG (CONCAT(value,' LIKE ',char(39),'%',@SEARCH,'%',char(39)), ' OR ') FROM STRING_SPLIT (@SEARCHCOLUMNLIST, ',');
END
SET @SQL = CONCAT(@SQL,' WHERE 1=1 AND (', @FILTER,') AND (', @SEPARATEDCOLUMNS,') ',@RECID);
--PRINT @SQL; --FOR Debuging
EXECUTE sp_executesql @SQL;
END
SP SystemSpGetUserMenuList
CREATE procedure [dbo].[SystemSpGetUserMenuList](@userRole varchar(50))
AS
BEGIN
SELECT sml.*, sgl.SystemName as GroupName
FROM [dbo].[SystemMenuList] sml,[dbo].[SystemGroupMenuList] sgl
WHERE (sml.[AccessRole] LIKE CONCAT(@userRole,',%') OR sml.[AccessRole] LIKE CONCAT('%,',@userRole,',%'))
AND sgl.Id = sml.GroupId AND sml.Active = 1 AND sgl.Active = 1
AND sml.NotShowInMenu = 0
ORDER BY sml.GroupId ASC
END;
SP LicSrvSpCheckUnlockKey
CREATE procedure [dbo].[LicSrvSpCheckUnlockKey](@unlockCode varchar(50),@partNumber varchar(50),@ipAddress varchar(50),@allowed bit output)
AS
BEGIN
SET NOCOUNT ON;
-- ALGORITHM EXAMPLE
-- SELECT CONCAT(CAST((YEAR(GETDATE()) * MONTH(GETDATE()) * DAY(GETDATE())) as varchar(100)),'-SOMETEXT-',CAST(YEAR(GETDATE()) as varchar(4)));
DECLARE @countValidUnlockKeys INT = 0;DECLARE @counter INT = 0;SET @allowed = 0;
--LOAD VALIDS AUTO SQL UNLOCKCODES FOR partNumber
DECLARE @SQLUNLOCK TABLE (Iid int identity(1,1),[Id] int not null, [Name] Varchar(30) not null, [Algorithm] varchar(MAX) not null,[AddressId] int not null,[ItemId] int not null,[LimitActive] bit not null, [ActivationLimit] int null,[UsedCount] int not null)
INSERT into @SQLUNLOCK SELECT l.Id,l.[Name],l.[Algorithm],l.[AddressId],l.[ItemId],l.[LimitActive],l.[ActivationLimit],l.[UsedCount] FROM [dbo].[LicSrvLicenseAlgorithmList] l,[dbo].[BasicItemList] i WHERE l.[Active] = 1 AND l.ItemId = i.Id
AND i.[PartNumber] = @partNumber AND i.[Active] = 1 AND ([ValidFrom] IS NULL OR [ValidFrom] < GETDATE()) AND ([ValidTo] IS NULL OR [ValidTo] > GETDATE())
SELECT @countValidUnlockKeys = COUNT([Iid]) FROM @SQLUNLOCK;
DECLARE @Id int;DECLARE @Name varchar(30);DECLARE @Algorithm nvarchar(MAX);DECLARE @AddressId int;DECLARE @ItemId int;DECLARE @LimitActive int;DECLARE @ActivationLimit int;DECLARE @UsedCount int;
DECLARE @UNLOCKKEY as varchar(MAX);
-- CHECKING ALL VALID UNLOCKKEY GENERATORS
WHILE @counter < @countValidUnlockKeys BEGIN
SELECT @Id=[Id],@Name=[Name],@Algorithm=[Algorithm],@AddressId=[AddressId],@ItemId=[ItemId],@Name=[Name],@LimitActive=[LimitActive],@ActivationLimit=[ActivationLimit],@UsedCount=[UsedCount] FROM @SQLUNLOCK WHERE Iid=@counter+1;
SET @Algorithm= REPLACE(@Algorithm, 'char(39)', '');
declare @t table(result varchar(max)); insert into @t exec (@Algorithm);SELECT @UNLOCKKEY = result FROM @t;
IF (@UNLOCKKEY = @unlockCode) BEGIN
IF (@LimitActive = 1 AND @UsedCount + 1 = @ActivationLimit) BEGIN --LAST ACTIVATION
UPDATE [dbo].[LicSrvLicenseAlgorithmList] SET [UsedCount] = [UsedCount] + 1, Active = 0 WHERE [Id] = @Id;SET @allowed = 1;
END ELSE IF (@LimitActive = 1 AND @UsedCount + 1 >= @ActivationLimit) BEGIN --WRONG USER DATA
UPDATE [dbo].[LicSrvLicenseAlgorithmList] SET [Active] = 0 WHERE [Id] = @Id;SET @allowed = 0;
END ELSE IF (@LimitActive = 1 AND @UsedCount + 1 < @ActivationLimit) BEGIN --USED LICENSE
UPDATE [dbo].[LicSrvLicenseAlgorithmList] SET [UsedCount] = [UsedCount] + 1 WHERE [Id] = @Id;SET @allowed = 1;
END ELSE IF (@LimitActive = 0) BEGIN --USED LICENSE
UPDATE [dbo].[LicSrvLicenseAlgorithmList] SET [UsedCount] = [UsedCount] + 1 WHERE [Id] = @Id;SET @allowed = 1;
END
GOTO CHECKDONE;
END
SET @counter += 1;
END;
CHECKDONE:
-- GENERATE LICENCE OR WRITE FAILED TRYING
IF (@allowed = 0) BEGIN
INSERT INTO [dbo].[LicSrvLicenseActivationFailList] ([IpAddress],[UnlockCode],[PartNumber])
VALUES (@ipAddress,@unlockCode,@partNumber);
END ELSE IF (@allowed = 1) BEGIN
INSERT INTO [dbo].[LicSrvUsedLicenseList] ([IpAddress],[UnlockCode],[AlgorithmName],[PartNumber],[License],[ActivateDate],[AddressId],[ItemId])
VALUES (@ipAddress,@unlockCode,@Name,@partNumber,NEWID(),GETDATE(),@AddressId,@ItemId);
END
RETURN;
END;
Úvod Start -DATABASE-RULE
Vše začíná U databáze. Pravidla určující MultiLogiku v 1 Balíčku. Zde najdete Kompletní Strukturu Aktuální Databáze a Seznam Pravidel, které je obecně dobré dodržovat
1 pravidlo: Každé slovo má Hluboký Význam
Základem je nastavit pevnou a jasnou strukturu a vazby již v databázi
DB - Export Procedur Řešení,
Zde najdete procedury, které stanovují pevnou a jasnou strukturu a vazby již v databázi
TR TR_SolutionEmailerHistoryList
CREATE TRIGGER [dbo].[TR_SolutionEmailerHistoryList] ON [dbo].[SolutionEmailerHistoryList]
FOR INSERT
AS
IF EXISTS (SELECT 0 FROM inserted)
BEGIN
SET NOCOUNT ON;
IF EXISTS (SELECT 0 FROM deleted)
BEGIN --UPDATE
SET NOCOUNT ON;
END ELSE
BEGIN -- INSERT
EXEC [dbo].[SpAutoCleanEmailer];
END
END
TR TR_DocumentationList
CREATE TRIGGER [dbo].[TR_DocumentationList] ON [dbo].[DocSrvDocumentationList]
FOR INSERT, UPDATE--, DELETE
AS
DECLARE @Operation VARCHAR(15)
IF EXISTS (SELECT 0 FROM inserted)
BEGIN
DECLARE @setActive bit;DECLARE @autoVersion int;DECLARE @RecId int;DECLARE @GroupId int;DECLARE @RecName varchar(150);
DECLARE @autoRemoveOld bit; DECLARE @UserId int;
SET @autoVersion = 0;SET @setActive = 1;SET @autoRemoveOld = 0;
SET NOCOUNT ON;
IF EXISTS (SELECT 0 FROM deleted)
BEGIN --UPDADE
SELECT @setActive = ins.[Active] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
SELECT @UserId = ins.UserId from inserted ins;
SELECT @GroupId = ins.DocumentationGroupId from inserted ins;
SELECT @RecName = ins.[Name] from inserted ins;
--GET AutoRemoveSetting
SELECT @autoRemoveOld = CAST(CAST(SUBSTRING(ss.[Value],1,10) as varchar(10)) as bit) FROM [dbo].[ServerSettingList] ss WHERE ss.[Key] = 'ServerDocsOldAutoRemoveEnabled';
IF(@setActive = 1) BEGIN
UPDATE [dbo].DocSrvDocumentationList SET [Active] = 0 WHERE Id <> @RecId AND [Name] = @RecName AND [DocumentationGroupId] = @GroupId;
END
--AutoRemove Older versions
IF(@autoRemoveOld = 1) BEGIN
DELETE FROM [dbo].DocSrvDocumentationList WHERE Id <> @RecId AND [Name] = @RecName AND [DocumentationGroupId] = @GroupId;
END
END ELSE
BEGIN -- INSERT
SELECT @setActive = ins.[Active] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
SELECT @UserId = ins.UserId from inserted ins;
SELECT @GroupId = ins.DocumentationGroupId from inserted ins;
SELECT @RecName = ins.[Name] from inserted ins;
--GET AutoRemoveSetting
SELECT @autoRemoveOld = CAST(CAST(SUBSTRING(ss.[Value],1,10) as varchar(10)) as bit) FROM [dbo].[ServerSettingList] ss WHERE ss.[Key] = 'ServerDocsOldAutoRemoveEnabled';
--AutoVersioning
SELECT @autoVersion = MAX(d.[AutoVersion]) + 1 FROM [dbo].DocSrvDocumentationList d WHERE d.[Name] = @RecName AND [DocumentationGroupId] = @GroupId;
IF (@autoVersion = 0 ) BEGIN SET @autoVersion = 1; END
UPDATE [dbo].DocSrvDocumentationList SET [AutoVersion] = @autoVersion WHERE Id = @RecId AND [DocumentationGroupId] = @GroupId;
IF(@setActive = 1) BEGIN
UPDATE [dbo].DocSrvDocumentationList SET [Active] = 0 WHERE Id <> @RecId AND [Name] = @RecName AND [DocumentationGroupId] = @GroupId;
END
--AutoRemove Older versions
IF(@autoRemoveOld = 1) BEGIN
DELETE FROM [dbo].DocSrvDocumentationList WHERE Id <> @RecId AND [Name] = @RecName AND [DocumentationGroupId] = @GroupId;
END
END
END
TR TR_BranchList
CREATE TRIGGER [dbo].[TR_BranchList] ON [dbo].[BusinessBranchList]
FOR INSERT, UPDATE, DELETE
AS
DECLARE @Operation VARCHAR(15)
IF EXISTS (SELECT 0 FROM inserted)
BEGIN
DECLARE @setActive bit;DECLARE @RecId int;
SET NOCOUNT ON;
IF EXISTS (SELECT 0 FROM deleted)
BEGIN --UPDADE
SELECT @setActive = ins.[Active] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setActive = 1) BEGIN
UPDATE [dbo].BusinessBranchList SET [Active] = 0 WHERE Id <> @RecId;
END
END ELSE
BEGIN -- INSERT
SELECT @setActive = ins.[Active] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setActive = 1) BEGIN
UPDATE [dbo].BusinessBranchList SET [Active] = 0 WHERE Id <> @RecId;
END
END
END ELSE
BEGIN --DELETE
SELECT @setActive = ins.[Active] from deleted ins;
SELECT @RecId = ins.Id from deleted ins;
IF(@setActive = 1) BEGIN
UPDATE [dbo].BusinessBranchList SET [Active] = 1
WHERE Id IN(SELECT TOP (1) Id FROM [dbo].BusinessBranchList WHERE Id <> @RecId)
;
END
END
TR TR_ServerModuleAndServiceList
CREATE TRIGGER [dbo].[TR_ServerModuleAndServiceList] ON [dbo].[ServerModuleAndServiceList]
FOR INSERT, UPDATE, DELETE
AS
DECLARE @Operation VARCHAR(15)
IF EXISTS (SELECT 0 FROM inserted)
BEGIN
DECLARE @setIsLoginModule bit;DECLARE @RecId int;DECLARE @UrlSubPath VarChar(100);DECLARE @Type VarChar(50);DECLARE @ModulePathExist bit;
SET NOCOUNT ON;
IF EXISTS (SELECT 0 FROM deleted)
BEGIN --UPDADE
SET @ModulePathExist = 0;
SELECT @setIsLoginModule = ins.[IsLoginModule] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
SELECT @UrlSubPath = ins.UrlSubPath from inserted ins;
SELECT @Type = ins.[InheritedLayoutType] from inserted ins;
--CheckExisting Only One Allowed HTML Module
IF (@Type = 'FullHtmlPage' OR @Type = 'HtmlBodyOnly') BEGIN
SELECT @ModulePathExist = 1 FROM [dbo].[ServerModuleAndServiceList] WHERE UrlSubPath = @UrlSubPath;
IF (@ModulePathExist = 1) BEGIN
RAISERROR('Can Be Only One Endpoint for Html Module', 16, 1)
ROLLBACK TRANSACTION
RETURN
END
END
--Changing Login Module Set
IF(@setIsLoginModule = 1) BEGIN
UPDATE [dbo].ServerModuleAndServiceList SET [IsLoginModule] = 0 WHERE Id <> @RecId;
END
END ELSE
BEGIN -- INSERT
SET @ModulePathExist = 0;
SELECT @setIsLoginModule = ins.[IsLoginModule] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
SELECT @UrlSubPath = ins.UrlSubPath from inserted ins;
SELECT @Type = ins.[InheritedLayoutType] from inserted ins;
--CheckExisting Only One Allowed HTML Module
IF (@Type = 'FullHtmlPage' OR @Type = 'HtmlBodyOnly') BEGIN
SELECT @ModulePathExist = 1 FROM [dbo].[ServerModuleAndServiceList] WHERE UrlSubPath = @UrlSubPath;
IF (@ModulePathExist = 1) BEGIN
RAISERROR('Can Be Only One Endpoint for Html Module', 16, 1)
ROLLBACK TRANSACTION
RETURN
END
END
--Changing Login Module Set
IF(@setIsLoginModule = 1) BEGIN
UPDATE [dbo].ServerModuleAndServiceList SET [IsLoginModule] = 0 WHERE Id <> @RecId;
END
END
END ELSE
BEGIN --DELETE
SELECT @setIsLoginModule = ins.[IsLoginModule] from deleted ins;
SELECT @RecId = ins.Id from deleted ins;
--Changing Login Module Set
IF(@setIsLoginModule = 1) BEGIN
UPDATE [dbo].ServerModuleAndServiceList SET [IsLoginModule] = 1
WHERE Id IN(SELECT TOP (1) Id FROM [dbo].ServerModuleAndServiceList WHERE Id <> @RecId)
;
END
END
TR TR_PaymentMethodList
CREATE TRIGGER [dbo].[TR_PaymentMethodList] ON [dbo].[BusinessPaymentMethodList]
FOR INSERT, UPDATE, DELETE
AS
DECLARE @Operation VARCHAR(15)
IF EXISTS (SELECT 0 FROM inserted)
BEGIN
DECLARE @setDefault bit;DECLARE @RecId int;
SET NOCOUNT ON;
IF EXISTS (SELECT 0 FROM deleted)
BEGIN --UPDADE
SELECT @setDefault = ins.[Default] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BusinessPaymentMethodList SET [Default] = 0 WHERE Id <> @RecId;
END
END ELSE
BEGIN -- INSERT
SELECT @setDefault = ins.[Default] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BusinessPaymentMethodList SET [Default] = 0 WHERE Id <> @RecId;
END
END
END ELSE
BEGIN --DELETE
SELECT @setDefault = ins.[Default] from deleted ins;
SELECT @RecId = ins.Id from deleted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BusinessPaymentMethodList SET [Default] = 1
WHERE Id IN(SELECT TOP (1) Id FROM [dbo].BusinessPaymentMethodList WHERE Id <> @RecId)
;
END
END
TR TR_ImageGalleryList
CREATE TRIGGER [dbo].[TR_ImageGalleryList] ON [dbo].[BasicImageGalleryList]
FOR INSERT, UPDATE, DELETE
AS
DECLARE @Operation VARCHAR(15)
IF EXISTS (SELECT 0 FROM inserted)
BEGIN
DECLARE @isPrimary bit;DECLARE @RecId int;DECLARE @HotelId int;
SET NOCOUNT ON;
IF EXISTS (SELECT 0 FROM deleted)
BEGIN --UPDADE
SELECT @isPrimary = ins.[IsPrimary] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@isPrimary = 1) BEGIN
UPDATE [dbo].BasicImageGalleryList SET [IsPrimary] = 0 WHERE Id <> @RecId;
END
END ELSE
BEGIN -- INSERT
SELECT @isPrimary = ins.[IsPrimary] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@isPrimary = 1) BEGIN
UPDATE [dbo].BasicImageGalleryList SET [IsPrimary] = 0 WHERE Id <> @RecId;
END
END
END ELSE
BEGIN --DELETE
SELECT @isPrimary = ins.[IsPrimary] from deleted ins;
SELECT @RecId = ins.Id from deleted ins;
IF(@isPrimary = 1) BEGIN
UPDATE [dbo].BasicImageGalleryList SET [IsPrimary] = 1
WHERE Id IN(SELECT TOP (1) Id FROM [dbo].BasicImageGalleryList WHERE Id <> @RecId)
;
END
END
TR TR_MaturityList
CREATE TRIGGER [dbo].[TR_MaturityList] ON [dbo].[BusinessMaturityList]
FOR INSERT, UPDATE, DELETE
AS
DECLARE @Operation VARCHAR(15)
IF EXISTS (SELECT 0 FROM inserted)
BEGIN
DECLARE @setDefault bit;DECLARE @RecId int;
SET NOCOUNT ON;
IF EXISTS (SELECT 0 FROM deleted)
BEGIN --UPDADE
SELECT @setDefault = ins.[Default] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BusinessMaturityList SET [Default] = 0 WHERE Id <> @RecId;
END
END ELSE
BEGIN -- INSERT
SELECT @setDefault = ins.[Default] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BusinessMaturityList SET [Default] = 0 WHERE Id <> @RecId;
END
END
END ELSE
BEGIN --DELETE
SELECT @setDefault = ins.[Default] from deleted ins;
SELECT @RecId = ins.Id from deleted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BusinessMaturityList SET [Default] = 1
WHERE Id IN(SELECT TOP (1) Id FROM [dbo].BusinessMaturityList WHERE Id <> @RecId)
;
END
END
TR TR_UserList
CREATE TRIGGER [dbo].[TR_UserList] ON dbo.SolutionUserList
FOR INSERT
AS
IF EXISTS (SELECT 0 FROM inserted)
BEGIN
DECLARE @UserId int;
SET NOCOUNT ON;
IF EXISTS (SELECT 0 FROM deleted)
BEGIN --UPDADE
SELECT @UserId = ins.Id from inserted ins;
END ELSE
BEGIN -- INSERT
SELECT @UserId = ins.Id from inserted ins;
INSERT INTO [dbo].[SystemParameterList]([UserId],[SystemName],[Value],[Type],[Description])
SELECT @UserId, pa.[SystemName],pa.[Value],pa.[Type],pa.[Description]
FROM [dbo].[SystemParameterList] pa
WHERE pa.UserId IS NULL;
END
END /* ELSE
BEGIN --DELETE
SELECT @setActive = ins.[Active] from deleted ins;
SELECT @RecId = ins.Id from deleted ins;
SELECT @RecName = ins.[Name] from deleted ins;
IF(@setActive = 1) BEGIN
UPDATE [dbo].DocumentationList SET [Active] = 1
WHERE Id IN(SELECT TOP (1) MAX(d.Id) FROM [dbo].DocumentationList d WHERE d.Id <> @RecId AND d.[Name] = @RecName)
;
END
END
*/
TR TR_PaymentStatusList
CREATE TRIGGER [dbo].[TR_PaymentStatusList] ON [dbo].[BusinessPaymentStatusList]
FOR INSERT, UPDATE, DELETE
AS
DECLARE @Operation VARCHAR(15)
IF EXISTS (SELECT 0 FROM inserted)
BEGIN
DECLARE @setDefault bit;DECLARE @RecId int;
SET NOCOUNT ON;
IF EXISTS (SELECT 0 FROM deleted)
BEGIN --UPDADE
SELECT @setDefault = ins.[Default] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BusinessPaymentStatusList SET [Default] = 0 WHERE Id <> @RecId;
END
END ELSE
BEGIN -- INSERT
SELECT @setDefault = ins.[Default] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BusinessPaymentStatusList SET [Default] = 0 WHERE Id <> @RecId;
END
END
END ELSE
BEGIN --DELETE
SELECT @setDefault = ins.[Default] from deleted ins;
SELECT @RecId = ins.Id from deleted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BusinessPaymentStatusList SET [Default] = 1
WHERE Id IN(SELECT TOP (1) Id FROM [dbo].BusinessPaymentStatusList WHERE Id <> @RecId)
;
END
END
TR TR_PaymentStatusListCreditNote
CREATE TRIGGER [dbo].[TR_PaymentStatusListCreditNote] ON [dbo].[BusinessPaymentStatusList]
FOR INSERT, UPDATE, DELETE
AS
DECLARE @Operation VARCHAR(15)
IF EXISTS (SELECT 0 FROM inserted)
BEGIN
DECLARE @setCreditNote bit;DECLARE @RecId int;
SET NOCOUNT ON;
IF EXISTS (SELECT 0 FROM deleted)
BEGIN --UPDADE
SELECT @setCreditNote = ins.[CreditNote] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setCreditNote = 1) BEGIN
UPDATE [dbo].BusinessPaymentStatusList SET [CreditNote] = 0 WHERE Id <> @RecId;
END
END ELSE
BEGIN -- INSERT
SELECT @setCreditNote = ins.[CreditNote] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setCreditNote = 1) BEGIN
UPDATE [dbo].BusinessPaymentStatusList SET [CreditNote] = 0 WHERE Id <> @RecId;
END
END
END ELSE
BEGIN --DELETE
SELECT @setCreditNote = ins.[CreditNote] from deleted ins;
SELECT @RecId = ins.Id from deleted ins;
IF(@setCreditNote = 1) BEGIN
UPDATE [dbo].BusinessPaymentStatusList SET [CreditNote] = 1
WHERE Id IN(SELECT TOP (1) Id FROM [dbo].BusinessPaymentStatusList WHERE Id <> @RecId)
;
END
END
TR TR_PaymentStatusListReceipt
CREATE TRIGGER [dbo].[TR_PaymentStatusListReceipt] ON [dbo].[BusinessPaymentStatusList]
FOR INSERT, UPDATE, DELETE
AS
DECLARE @Operation VARCHAR(15)
IF EXISTS (SELECT 0 FROM inserted)
BEGIN
DECLARE @setReceipt bit;DECLARE @RecId int;
SET NOCOUNT ON;
IF EXISTS (SELECT 0 FROM deleted)
BEGIN --UPDADE
SELECT @setReceipt = ins.[Receipt] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setReceipt = 1) BEGIN
UPDATE [dbo].BusinessPaymentStatusList SET [Receipt] = 0 WHERE Id <> @RecId;
END
END ELSE
BEGIN -- INSERT
SELECT @setReceipt = ins.[Receipt] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setReceipt = 1) BEGIN
UPDATE [dbo].BusinessPaymentStatusList SET [Receipt] = 0 WHERE Id <> @RecId;
END
END
END ELSE
BEGIN --DELETE
SELECT @setReceipt = ins.[Receipt] from deleted ins;
SELECT @RecId = ins.Id from deleted ins;
IF(@setReceipt = 1) BEGIN
UPDATE [dbo].BusinessPaymentStatusList SET [Receipt] = 1
WHERE Id IN(SELECT TOP (1) Id FROM [dbo].BusinessPaymentStatusList WHERE Id <> @RecId)
;
END
END
TR TR_WebMenuList
CREATE TRIGGER [dbo].[TR_WebMenuList] ON [dbo].[WebMenuList]
FOR INSERT, UPDATE, DELETE
AS
DECLARE @Operation VARCHAR(15)
IF EXISTS (SELECT 0 FROM inserted)
BEGIN
DECLARE @setDefault bit;DECLARE @RecId int;
SET NOCOUNT ON;
IF EXISTS (SELECT 0 FROM deleted)
BEGIN --UPDADE
SELECT @setDefault = ins.[Default] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].WebMenuList SET [Default] = 0 WHERE Id <> @RecId;
END
END ELSE
BEGIN -- INSERT
SELECT @setDefault = ins.[Default] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].WebMenuList SET [Default] = 0 WHERE Id <> @RecId;
END
END
END/* ELSE
BEGIN --DELETE
SELECT @setDefault = ins.[Default] from deleted ins;
SELECT @RecId = ins.Id from deleted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].WebMenuList SET [Default] = 1
WHERE Id IN(SELECT TOP (1) Id FROM [dbo].WebMenuList WHERE Id <> @RecId)
;
END
END*/
TR TR_SystemTranslationList
CREATE TRIGGER [dbo].[TR_SystemTranslationList] ON [dbo].[SystemTranslationList]
FOR INSERT
AS
IF EXISTS (SELECT 0 FROM inserted)
BEGIN
DECLARE @UserId int;DECLARE @RecId int;
DECLARE @AutoFillDictionaries bit;
DECLARE @SystemName varchar(50);DECLARE @DescriptionCz varchar(500);DECLARE @DescriptionEn varchar(500);
SET @AutoFillDictionaries = 1;
SET NOCOUNT ON;
IF NOT EXISTS (SELECT 0 FROM deleted)
BEGIN -- INSERT
SELECT @RecId = ins.Id from inserted ins;
SELECT @UserId = ins.UserId from inserted ins;
SELECT @SystemName = ins.SystemName from inserted ins;
SELECT @DescriptionCz = ins.DescriptionCz from inserted ins;
SELECT @DescriptionEn = ins.DescriptionEn from inserted ins;
--GET AutoFilling Configuration
SELECT @AutoFillDictionaries = CAST(CAST(SUBSTRING(p.[Value],1,10) as varchar(10)) as bit) FROM [dbo].[SystemParameterList] p WHERE p.[UserId] IS NULL AND p.[SystemName] = 'ServerTranslationAutoFillEnabled';
IF (@AutoFillDictionaries = 1) BEGIN
IF(@DescriptionCz IS NULL OR LEN(@DescriptionCz) = 0) BEGIN SET @DescriptionCz = @SystemName; END
IF(@DescriptionEn IS NULL OR LEN(@DescriptionEn) = 0) BEGIN SET @DescriptionEn = @SystemName; END
UPDATE dbo.SystemTranslationList SET [DescriptionCz] = @DescriptionCz, [DescriptionEn] = @DescriptionEn WHERE Id = @RecId;
END
END
END
TR TR_VatList
CREATE TRIGGER [dbo].[TR_VatList] ON [dbo].[BasicVatList]
FOR INSERT, UPDATE, DELETE
AS
DECLARE @Operation VARCHAR(15)
IF EXISTS (SELECT 0 FROM inserted)
BEGIN
DECLARE @setDefault bit;DECLARE @RecId int;
SET NOCOUNT ON;
IF EXISTS (SELECT 0 FROM deleted)
BEGIN --UPDADE
SELECT @setDefault = ins.[Default] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BasicVatList SET [Default] = 0 WHERE Id <> @RecId;
END
END ELSE
BEGIN -- INSERT
SELECT @setDefault = ins.[Default] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BasicVatList SET [Default] = 0 WHERE Id <> @RecId;
END
END
END ELSE
BEGIN --DELETE
SELECT @setDefault = ins.[Default] from deleted ins;
SELECT @RecId = ins.Id from deleted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BasicVatList SET [Default] = 1
WHERE Id IN(SELECT TOP (1) Id FROM [dbo].BasicVatList WHERE Id <> @RecId)
;
END
END
TR TR_WarehouseList
CREATE TRIGGER [dbo].[TR_WarehouseList] ON [dbo].[BusinessWarehouseList]
FOR INSERT, UPDATE, DELETE
AS
DECLARE @Operation VARCHAR(15)
IF EXISTS (SELECT 0 FROM inserted)
BEGIN
DECLARE @setDefault bit;DECLARE @RecId int;
SET NOCOUNT ON;
IF EXISTS (SELECT 0 FROM deleted)
BEGIN --UPDADE
SELECT @setDefault = ins.[Default] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BusinessWarehouseList SET [Default] = 0 WHERE Id <> @RecId;
END
END ELSE
BEGIN -- INSERT
SELECT @setDefault = ins.[Default] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BusinessWarehouseList SET [Default] = 0 WHERE Id <> @RecId;
END
END
END ELSE
BEGIN --DELETE
SELECT @setDefault = ins.[Default] from deleted ins;
SELECT @RecId = ins.Id from deleted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BusinessWarehouseList SET [Default] = 1
WHERE Id IN(SELECT TOP (1) Id FROM [dbo].BusinessWarehouseList WHERE Id <> @RecId)
;
END
END
TR TR_ReportList
CREATE TRIGGER [dbo].[TR_ReportList] ON [dbo].[SystemReportList]
FOR INSERT, UPDATE, DELETE
AS
DECLARE @Operation VARCHAR(15)
IF EXISTS (SELECT 0 FROM inserted)
BEGIN
DECLARE @setDefault bit;DECLARE @RecId int;
SET NOCOUNT ON;
IF EXISTS (SELECT 0 FROM deleted)
BEGIN /* UPDADE */
SELECT @setDefault = ins.[Default] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].SystemReportList SET [Default] = 0 WHERE Id <> @RecId;
END
END ELSE
BEGIN /* INSERT */
SELECT @setDefault = ins.[Default] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].SystemReportList SET [Default] = 0 WHERE Id <> @RecId;
END
END
END ELSE
BEGIN /* DELETE */
SELECT @setDefault = ins.[Default] from deleted ins;
SELECT @RecId = ins.Id from deleted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].SystemReportList SET [Default] = 1
WHERE Id IN(SELECT TOP (1) Id FROM [dbo].SystemReportList WHERE Id <> @RecId)
;
END
END
TR TR_UnitList
CREATE TRIGGER [dbo].[TR_UnitList] ON [dbo].[BasicUnitList]
FOR INSERT, UPDATE, DELETE
AS
DECLARE @Operation VARCHAR(15)
IF EXISTS (SELECT 0 FROM inserted)
BEGIN
DECLARE @setDefault bit;DECLARE @RecId int;
SET NOCOUNT ON;
IF EXISTS (SELECT 0 FROM deleted)
BEGIN --UPDADE
SELECT @setDefault = ins.[Default] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BasicUnitList SET [Default] = 0 WHERE Id <> @RecId;
END
END ELSE
BEGIN -- INSERT
SELECT @setDefault = ins.[Default] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BasicUnitList SET [Default] = 0 WHERE Id <> @RecId;
END
END
END ELSE
BEGIN --DELETE
SELECT @setDefault = ins.[Default] from deleted ins;
SELECT @RecId = ins.Id from deleted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BasicUnitList SET [Default] = 1
WHERE Id IN(SELECT TOP (1) Id FROM [dbo].BasicUnitList WHERE Id <> @RecId)
;
END
END
TR TR_WebDocumentationList
CREATE TRIGGER [dbo].[TR_WebDocumentationList] ON [dbo].[WebDocumentationList]
FOR INSERT, UPDATE--, DELETE
AS
DECLARE @Operation VARCHAR(15)
IF EXISTS (SELECT 0 FROM inserted)
BEGIN
DECLARE @setActive bit;DECLARE @autoVersion int;DECLARE @RecId int;DECLARE @RecName varchar(150);
DECLARE @autoRemoveOld bit; DECLARE @UserId int;
SET @autoVersion = 0;SET @setActive = 1;SET @autoRemoveOld = 0;
SET NOCOUNT ON;
IF EXISTS (SELECT 0 FROM deleted)
BEGIN --UPDADE
SELECT @setActive = ins.[Active] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
SELECT @UserId = ins.UserId from inserted ins;
SELECT @RecName = ins.[Name] from inserted ins;
--GET AutoRemoveSetting
SELECT @autoRemoveOld = CAST(CAST(SUBSTRING(p.[Value],1,10) as varchar(10)) as bit) FROM [dbo].[SystemParameterList] p WHERE p.[UserId] = @UserId AND p.[SystemName] = 'WebDocsOldAutoRemoveEnabled';
IF(@setActive = 1) BEGIN
UPDATE [dbo].WebDocumentationList SET [Active] = 0 WHERE Id <> @RecId AND [Name] = @RecName;
END
--AutoRemove Older versions
IF(@autoRemoveOld = 1) BEGIN
DELETE FROM [dbo].WebDocumentationList WHERE Id <> @RecId AND [Name] = @RecName;
END
END ELSE
BEGIN -- INSERT
SELECT @setActive = ins.[Active] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
SELECT @UserId = ins.UserId from inserted ins;
SELECT @RecName = ins.[Name] from inserted ins;
--GET AutoRemoveSetting
SELECT @autoRemoveOld = CAST(CAST(SUBSTRING(p.[Value],1,10) as varchar(10)) as bit) FROM [dbo].[SystemParameterList] p WHERE p.[UserId] = @UserId AND p.[SystemName] = 'WebDocsOldAutoRemoveEnabled';
--AutoVersioning
SELECT @autoVersion = MAX(d.[AutoVersion]) + 1 FROM [dbo].WebDocumentationList d WHERE d.[Name] = @RecName;
IF (@autoVersion = 0 ) BEGIN SET @autoVersion = 1; END
UPDATE [dbo].WebDocumentationList SET [AutoVersion] = @autoVersion WHERE Id = @RecId;
IF(@setActive = 1) BEGIN
UPDATE [dbo].WebDocumentationList SET [Active] = 0 WHERE Id <> @RecId AND [Name] = @RecName;
END
--AutoRemove Older versions
IF(@autoRemoveOld = 1) BEGIN
DELETE FROM [dbo].WebDocumentationList WHERE Id <> @RecId AND [Name] = @RecName;
END
END
END /* ELSE
BEGIN --DELETE
SELECT @setActive = ins.[Active] from deleted ins;
SELECT @RecId = ins.Id from deleted ins;
SELECT @RecName = ins.[Name] from deleted ins;
IF(@setActive = 1) BEGIN
UPDATE [dbo].WebDocumentationList SET [Active] = 1
WHERE Id IN(SELECT TOP (1) MAX(d.Id) FROM [dbo].WebDocumentationList d WHERE d.Id <> @RecId AND d.[Name] = @RecName)
;
END
END
*/
TR TR_CurrencyList
CREATE TRIGGER [dbo].[TR_CurrencyList] ON [dbo].[BasicCurrencyList]
FOR INSERT, UPDATE, DELETE
AS
DECLARE @Operation VARCHAR(15)
IF EXISTS (SELECT 0 FROM inserted)
BEGIN
DECLARE @setDefault bit;DECLARE @RecId int;
SET NOCOUNT ON;
IF EXISTS (SELECT 0 FROM deleted)
BEGIN --UPDADE
SELECT @setDefault = ins.[Default] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BasicCurrencyList SET [Default] = 0 WHERE Id <> @RecId;
END
END ELSE
BEGIN -- INSERT
SELECT @setDefault = ins.[Default] from inserted ins;
SELECT @RecId = ins.Id from inserted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BasicCurrencyList SET [Default] = 0 WHERE Id <> @RecId;
END
END
END ELSE
BEGIN --DELETE
SELECT @setDefault = ins.[Default] from deleted ins;
SELECT @RecId = ins.Id from deleted ins;
IF(@setDefault = 1) BEGIN
UPDATE [dbo].BasicCurrencyList SET [Default] = 1
WHERE Id IN(SELECT TOP (1) Id FROM [dbo].BasicCurrencyList WHERE Id <> @RecId)
;
END
END
TR TR_ParameterList
CREATE TRIGGER [dbo].[TR_ParameterList] ON dbo.SystemParameterList
FOR INSERT
AS
IF EXISTS (SELECT 0 FROM inserted)
BEGIN
DECLARE @UserId int;DECLARE @RecId int;DECLARE @SystemName varchar(50); DECLARE @Value varchar(max);
DECLARE @Type varchar(20); DECLARE @Description varchar(MAX);
SET NOCOUNT ON;
IF EXISTS (SELECT 0 FROM deleted)
BEGIN --UPDADE
SELECT @UserId = ins.UserId from inserted ins;
END ELSE
BEGIN -- INSERT
SELECT @RecId = ins.[Id] from inserted ins;
SELECT @UserId = ins.[UserId] from inserted ins;
SELECT @SystemName = ins.[SystemName] from inserted ins;
SELECT @Type = ins.[Type] from inserted ins;
SELECT @Value = CONVERT(varchar(MAX),p.[Value]), @Description = CONVERT(varchar(MAX),p.[Description]) from [dbo].[SystemParameterList] p WHERE p.Id = @RecId ;
IF (@UserId IS NULL) BEGIN
INSERT INTO [dbo].[SystemParameterList]([UserId],[SystemName],[Value],[Type],[Description])
SELECT DISTINCT pa.UserId, @SystemName, @Value, @Type, @Description
FROM [dbo].[SystemParameterList] pa
WHERE pa.UserId IS NOT NULL;
END
END
END /* ELSE
BEGIN --DELETE
SELECT @UserId = ins.[UserId] from inserted ins;
SELECT @SystemName = ins.[SystemName] from inserted ins;
IF (@UserId IS NULL) BEGIN
DELETE FROM [dbo].[SystemParameterList] WHERE [SystemName] = @SystemName;
END
END*/
Úvod Start -DATABASE-RULE
Vše začíná U databáze. Pravidla určující MultiLogiku v 1 Balíčku. Zde najdete Kompletní Strukturu Aktuální Databáze a Seznam Pravidel, které je obecně dobré dodržovat
1 pravidlo: Každé slovo má Hluboký Význam
Složené Datapohledy a Funkce
DB - Export Views a Funkcí Řešení,
Zde najdete složené Datapohledy a Funkce
FNfnGetFileName
(
@fullpath nvarchar(1024)
)
RETURNS nvarchar(1024)
AS
BEGIN
IF(CHARINDEX('\', @fullpath) > 0)
SELECT @fullpath = RIGHT(@fullpath, CHARINDEX('\', REVERSE(@fullpath)) -1)
RETURN @fullpath
END
FN Fn_SplitString
(
@string nvarchar(max),
@delimiter nvarchar(max)
)
/*
The same as STRING_SPLIT for compatibility level < 130
https://docs.microsoft.com/en-us/sql/t-sql/functions/string-split-transact-sql?view=sql-server-ver15
*/
RETURNS TABLE AS RETURN
(
SELECT
--ROW_NUMBER ( ) over(order by (select 0)) AS id -- intuitive, but not correect
Split.a.value('let $n := . return count(../*[. << $n]) + 1', 'int') AS id
, Split.a.value('.', 'NVARCHAR(MAX)') AS value
FROM
(
SELECT CAST('<X>'+REPLACE(@string, @delimiter, '</X><X>')+'</X>' AS XML) AS String
) AS a
CROSS APPLY String.nodes('/X') AS Split(a)
)
VIEW ProviderViewGeneratedToolRatingList
AS
SELECT Name, AVG(Rating) AS Rating, COUNT(Id) AS CountRating,
(SELECT COUNT(Id) AS Expr1
FROM dbo.ProviderGeneratedToolList AS gt
WHERE (Name = g.Name)) AS TotalCount
FROM dbo.ProviderGeneratedToolList AS g
WHERE (Rating IS NOT NULL)
GROUP BY Name
VIEW BasicViewAttachmentList
AS
SELECT TOP (100) PERCENT AL.Id, AL.FileName, IL.PartNumber, AL.TimeStamp
FROM dbo.BasicAttachmentList AS AL LEFT OUTER JOIN
dbo.BasicItemList AS IL ON AL.ParentId = IL.Id AND AL.ParentType = 'ITEM'
ORDER BY AL.FileName
Úvod EIC-Dev Pravidla
EASY IT CENTER Pravidla, návody a řešení Platná pro Projekt EIC
Rady A Návody, jak nasadit řešení na různé OS
EASY-SYSTEM-Builder & EASY-DATA-Center & Visual Studio Rady
Pro snadný Vývoj, Pořizování Obtidsků Databáze a automatické Generování DB Modelu
psaní Statických MD Dokumentací,
si nainstalujte Tyto Doplňky:
BundlerMinifier - Minifikace souborů Projektu
EntityFramework Core Scafolding - Vytvoření Modelu DB v Projektu 1 kliknutím
MarkdownEditor - Visual Studio MarkDown Editor
Mermaid - Visual Studio mermaid editor
Multi-Language - Visual Studio MultiLanguage Rozšířená Podpora
Preview-HTML - Náhled HTML
Vytvoření Linux SLužby EIC serveru a její Ovládání
Soubory Služeb na Debian jsou ve složce: /lib/systemd/system
Nakopírujte soubor Služby z Data/InstallHelp/ do této složky a upravte
Aktivujte Službu a můžete nastartovat
- Přehled příkazů služby EIC serveru
systemctl enable dotnet-TABackend-service.service
systemctl start dotnet-TABackend-service.service
systemctl status dotnet-TABackend-service.service
systemctl stop dotnet-TABackend-service.service
- Linux přímé spuštění pomocí dotnet dll příkazu
dotnet EasyITCenter.dll
WINDOWS OS Nápovědy a Tipy
- Install Backend 'EXE' file as Windows service by SC/InstalUtil/ utility
- Windows Service utilities and Service control from command Line examples are in 'WinServiceUtilities' folder
Instalace EIC serveru na Windows Krok za Krokem
Je jednoduchá pomocí Exe Instalátoru
- Nainstalujte si MSSQL Express 2019 a Vyšší
- Importujte databázi z EasyITCenter.bak. souboru
- Spusťte Instalátor EIC Serveru
- Zkuste spustit EIC z nainstalované složky pomocí Exe Souboru
pro kontrolu připojení k databázi. Konfigurační soubor připojení k DB najdete v ProgramData/EasyITcenter/config.json - Spusťte Windows Službu EasyITcenter
Detailní popis nasazení Databáze je popsán v Instalaci na Linux Debian
Instalace EIC serveru na Linux Debian 11x64 Krok za Krokem
Zde je přehled linuxových příkazů krok za krokem
pro instalaci EIC na linux
- Instalace MSSQL krok za krokem
sudo apt install gnupg2 apt-transport-https wget curl.
wget -q -O- https://packages.microsoft.com/keys/microsoft.asc | \
gpg --dearmor | sudo tee /usr/share/keyrings/microsoft.gpg > /dev/null 2>&1
echo "deb [signed-by=/usr/share/keyrings/microsoft.gpg arch=amd64,armhf,arm64] https://packages.microsoft.com/ubuntu/20.04/mssql-server-2019 focal main" | \
sudo tee /etc/apt/sources.list.d/mssql-server-2019.list
sudo apt update
sudo apt install mssql-server
sudo /opt/mssql/bin/mssql-conf setup
sudo systemctl is-enabled mssql-server
sudo systemctl status mssql-server
Nyní se můžete připojit k MSSQL serveru vzdáleně z MSSQL Management Studio
a naimportovat Databázi ze souboru EasyITCenter.bak
a to takto:
- Vytvořte Databázi EasyITCenter
- nastavte Recovery model Simple, Collation CZECH_CI_AS
- vytvořte MSSQL uživatele easyitcenter s heslem easyitcenter
- Nahrajte EasyITCenter.bak na server do nějaké složky
- Obnovte Databázi EasyITCenter a zvolte EasyITCenter.bak
- Smažte uživatele easyitcenter ze SECURITY databáze EasyITCenter
- v Programibility/Stored Procedures Spusťte proceduru SpTaskDB_SETRIGHTS
znovu se vam přidá a nastavi se všemi právy - READ/WRITE/EXECUTE
HOTOVO Tím je hotovo nasazení MSSQL a Databáze
Vyzkoušejte si připojení
Linux Instalace Nástrojů pro správu serveru
- zde jsou příkazy na instalaci pomocných nástrojů pro správu linuxového serveru
sudo apt-get install mc - Instalace File Manažera
- Instalace Softwarového Firewalu
sudo apt install ufw
sudo ufw allow OpenSSH
sudo ufw allow 1433/tcp
sudo ufw enable
sudo ufw status
- Instalace MSSQL Nástrojů sqlcmd, atd
echo "deb [signed-by=/usr/share/keyrings/microsoft.gpg arch=amd64,armhf,arm64] https://packages.microsoft.com/ubuntu/20.04/prod focal main" | \
sudo tee /etc/apt/sources.list.d/prod.list
sudo apt update
sudo apt install mssql-tools unixodbc-dev
ls /opt/mssql-tools/bin
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc
echo $PATH
which sqlcmd
which bcp
HOTOVO
můžete si vyzkoušet připojení z CMD
sqlcmd -S localhost -U SA -p
MarkDown Item Template
Úvod EIC - Dokumentace Projektu
EasyITcenter Universální řešení serverů IT světa v 1 Globálním Balíčku Modulární Server s možností neomezeného a přesto extermně jednoduchého vývoje všemi směry Ideální Centrální Správa sítí, strojů, IT a všeho co si dovedete prtředstavit. Máte Otázky? neváhejte nám zavolat Základní Struktura Projektu
EASY-SYSTEM-Builder & EASY-DATA-Center Nápověda pro Visual Studio
Migrace mezi typy databází
- Nainstalujte SW 'Mysql WorkBench'
- spustit migrace
Nápověda: https://severalnines.com/blog/how-migrate-mssql-mysql/
SW: https://dev.mysql.com/downloads/file/?id=517975
Windows Store Stáhnout App Link Generator
- vložte odkaz na podrobnosti aplikace z internetového obchodu
- Příklad: https://apps.microsoft.com/store/detail/xaml-studio/9NTLS214TKMQ
- https://store.rg-adguard.net/
Aplikace pro Windows a nástroje Windows
- v nabídce Start Windows Kits
- cmd Obnovit nastavení obchodu
wsreset.exe
Více stovek nástrojů a nápadů Github Soucre se nepoužívá
- Sto hotových nástrojů je zdarma pro rychlou implementaci
- Jednoduchá logika kódu s nejlepšími pravidly systémové logiky Minimalizujte potřeby pro implementaci zpráv
- Příklad: https://github.com/search?q=wpf+tool&type=repositories
- Levné a rychlé zprávy o implementaci Příklad: Vzdálená podpora RDP 1 den, HTML editor pro správu webových stránek: 2 dny
- Google vyřeší nemožný problém za jeden den
- Je implementováno jen málo nástrojů, není potřeba další pro 95 % standardních systémů (Příklad FYIRoporting: Kompletní bezplatné tiskové řešení)
Příklad otázky: Jak řešíte aktualizaci systému? -
Odpověď: Snadno podle čísla verze v názvu souboru
PROČ:
Protože jsou změny implementovány v logické struktuře AUTO
nebo Pokud ne, bude nutné změnit na AUTO Logika = Poslední ruční přepisování
Každá každá logika selhala. Toto je skutečný problém 95 % existujících systémů
Implementované bezplatné nepoužívané nástroje jsou nejlepším řešením Často se nepoužívá více světových zdrojů
- Výsledkem jsou implementované nástroje v obou řešeních
- SNADNÉ DATOVÉ CENTRUM – Více než 100 bezplatných technologií pro vyřešení JAKÉKOLI situace a nepotřebujete další existující levná řešení
- EASY SYSTEM BUILDER – z implementovaných 50 balíčků se používá pouze 10 s několika částmi možností
Zde je testament: EASYTools 3rd Free Addons
Podmínka API pro ignorování v Swagger Docs
[ApiExplorerSettings(IgnoreApi = true)]
Popis API pro popis v Swagger Docs
[SwaggerTag("Šablona API s INSERT/UPDATE/DELETE/SELECT AND FILTERING API")]
public class TemplateListApi : ControllerBase {
[SwaggerOperation(Summary = "Get All records", Description = "Async standard select record API", OperationId = "Select all records", Tags = new[] { "TemplateListApi" })]
public async Task<string> GetTemplateList() {
[HttpDelete("/TemplateList/{id}")]
[Consumes("application/json")]
[SwaggerOperation(Summary = "Delete Record", Description = "Async standard Delete Record API", OperationId = "Delete Record", Tags = new[] { "TemplateListApi" })]
public async Task<string> DeleteTemplateList(string id) {
Šablona položky MarkDown
Úvod EIC - Dokumentace Projektu
EasyITcenter Universální řešení serverů IT světa v 1 Globálním Balíčku Modulární Server s možností neomezeného a přesto extermně jednoduchého vývoje všemi směry Ideální Centrální Správa sítí, strojů, IT a všeho co si dovedete prtředstavit. Máte Otázky? neváhejte nám zavolat All API Types Descrtiption
Server Static API pro moduly, správu a ovládání
Server má několik statických API používaných funkcí, správa implementované moduly, role, řízení.
Zde je seznam statických API vyloučených v dokumentaci Auto API
[GET] /ServerRestart - Admin Restart Server
[GET] /AdminApiDocs - Dokumentace automatického rozhraní API
[WS] /WS/ServerCoreMonitor - Server Core Socket Monitor
[GET] /ServerDbDgmlSchema - Auto DB Schema Diagram
[GET] /ServerHealthService - Monitor stavu serveru
[GET] /Docs - Serverová statická dokumentace MD
[GET] /Docs - Serverová statická dokumentace MD
[GET] / - Centrální webový portál serveru
[GET]/Downoads – Stahování ke stažení na serveru
Zde je seznam statických API zahrnutých v dokumentaci Auto API Strukturu rozhraní API naleznete v dokumentaci Auto API
[GET,POST] /ServerEmailer - Server Maas Emailing
Úvod EIC - Dokumentace Projektu
EasyITcenter Universální řešení serverů IT světa v 1 Globálním Balíčku Modulární Server s možností neomezeného a přesto extermně jednoduchého vývoje všemi směry Ideální Centrální Správa sítí, strojů, IT a všeho co si dovedete prtředstavit. Máte Otázky? neváhejte nám zavolat Zde je Výčet Konfigurace serveru a popis co dané volby Dělají a znamenají. Když si je namalujete do pavouka zjistíte že to výkrývá téměř celé IT.
Základní Konfigurace Serveru,
Zde je Aktuální základní konfigurace serveru.Jsou do ní vytažené jen ty nejstěžejnější
nastavení, protože k dispozici sich je stonásobně víckrát.
To Vyplývá z počtu přes 100 nasazených technologií v 1 řešení parfekně vyladěných pro dokonalou práci.
Config
ConfigTimeTokenValidationEnabled
-
Enable Disable Bearer Token Timeout Validation Token can be valid EveryTime to using:
Example for machine connection Or is Control last activity
ConfigApiTokenTimeoutMin
-
Bearer Token Timeout Setting in Minutes. Connection must be Refreshed in Interval After
Timeout connection Must Login Again. It is as needed. You Can Change Key for close All
connections Immediately. Timeout is good for Webpages
Recomended: 15
ConfigServerStartupOnHttps
-
Setting for Server URL Services. Logically can run only one Http or Https Server has
more Security Setting Politics.
Recommended: true
ConfigCertificateDomain
-
Its Domain for include to Automatic Generated Certificate For Server running on HTTPS.
Domain is for Your validation Certificate Domain. Can be Changed for commercial.
Domain is Used for Lets Encrypt also
Write with Comma separator
Recommended: 127.0.0.1
ConfigCertificatePassword
-
Password will be inserted to Server Generated Certificate for HTTPS.
Recommended: empty = Maximal Security Randomly generated 20 chars string
ConfigServerStartupHttpPort
-
Set Server Startup HTTP Port on Http/HttpS/WebSocket and for All Engines, Modules, API
Controler and WebPages
Recommended: 5000
ConfigJwtLocalKey
-
Special Functions:Server AutoGenerated encryption Key For Securing Communication On Each
Server Restart All Tokens not will be valid and the Login Reconnect is Requested. Its
AntiHacker Security Rule
Recommended: empty = Maximal Security Randomly generated 40 chars string
ConfigCoreServerRegisteredName
-
Server Service Name automatic figured in All IS/OS/Engines info
Recommended: EASY-IT-CENTER
ConfigServerGetLetsEncrypt
-
Setting for Automatic Obtain Lets Encrypt
more Security Setting Politics.
Recommended: true
ConfigCertificatePath
-
Certificate file NextFrom'DATA'Path\Filename.pfx For import External Certificate
Its Path from Data Startup Folder,example "groupware.pfx" is in Data Path
The Password must be inserted in ConfigCertificatePassword Settings
Other for ignore this Setting set empty string ""
This settings has Higest Priority before LesEncrypt enabled
ConfigLogWarnPlusToDbEnabled
- Enable Logging Server Warn and Errors To Database
ConfigManagerEmailAddress
- Emailová adresa do obchodních kontaktů
ConfigServerStartupHTTPAndHTTPS
- Startup Server On HTTP and HTTPS on Defined Port /// Aktivuje Provoz na protokolech HTTP i HTTPS současně, /// pro definici HTTP jej nastavte na zapnuto a dále dle nastaveni pro HTTPS
ConfigServerStartupHttpsPort
-
Set Server Startup HTTPS Port on Http/HttpS/WebSocket and for All Engines, Modules, API
Controler and WebPages
Recommended: 5001
Database
DatabaseInternalCachingEnabled
-
Enable Disable Entity Framework Internal Cache I recommend turning it off : from Logic,
Duplicit Functionality with Database Server in complex process can generate problems
Recommended: false
DatabaseInternalCacheTimeoutMin
-
Time in Minutes for Database Valid Cache Data and Refreshing Duplicit Functionality with
Database Server
Recommended: 30
Emailer
EmailerSMTPSslIsEnabled
-
EmailerSMTPSslIsEnabled SSl Email Protocol for Login to External Mail Server Its
Necessary for Correct running Server Internal Core Monitoring
EmailerServiceEmailAddress
-
Service email, for info about not available service from HeatchCheck Can be used for
next Develop, automatic checking problems, missing data and all other Its Necessary for
Correct running Server Internal Core Monitoring
EmailerSMTPServerAddress
-
SMTP Server Address for Login to External Mail Server Its Necessary for Correct running
Server Internal Core Monitoring
EmailerSMTPPort
-
SMTP Port for Login to External Mail Server Its Necessary for Correct running Server
Internal Core Monitoring
EmailerSMTPLoginUsername
-
SMTP UserName for Login to External Mail Server Its Necessary for Correct running Server
Internal Core Monitoring
EmailerSMTPLoginPassword
-
SMTP Password for Login to External Mail Server Its Necessary for Correct running Server
Internal Core Monitoring
Module
ModuleSwaggerApiDocEnabled
-
Special Function: Server Automatically Generate Full Documentation of API structure AND
Database Model. Plus Included API Interface for Online Testing All API Methods with
Authentication Its Automatic Solution for Third Party cooperation. All changes are
Reflected after restart server
ModuleWebDataManagerEnabled
-
Module: AutoGenerated Database DataManager for working with Data Running only
in Debug mode for simple Develop, can be modified. All changes are Reflected after
restart server
ModuleHealthServiceEnabled
-
Special Function: More than 200 Server Statuses Can be monitored by HeathCheckService,
Over Net can Control Other Company Services Also as Central Control Point With Email
Service. For Example: Server/Memory/All DB Types/IP/HDD/Port/Api/NET/Cloud/Environment
Must be run for Metrics AddOn https://learn.microsoft.com/en-us/dotnet/architecture/microservices/implement-resilient-applications/monitor-app-health
ModuleHealthServiceRefreshIntervalSec
-
Special Function: More than 200 Server Statuses Can be monitored by HeathCheckService,
Over Net can Control Other Company Services Also as Central Control Point With Email
Service. For Example: Server/Memory/All DB Types/IP/HDD/Port/Api/NET/Cloud/Environment
Must be run for Metrics AddOn !!! run in Release mode for Good Reading of Logs without
HeathChecks Cycling info https://github.com/Xabaril/AspNetCore.Diagnostics.HealthChecks https://testfully.io/blog/api-health-check-monitoring/
ModuleMdDocumentationEnabled
-
Enable Server Structure Documentation for Developers Using RootPath, - Block File
Browsing Is Good for Server with Documentation only Or Use for Show WebPage and Copy
"Only HTML"
ModuleDbDiagramGeneratorEnabled
- Enable Automatic Database Diagram for Simple show Database structure with All bingings
EnableAutoShowStaticMdAsHtml
- Zapíná Vypína Automatické zobrazení MD souboru ve Statickém úložišti jako HTML s URL bez ".md"
EnableCodeBrowser
- Zapíná/Vypína Modul Procházení Kódů Projektů Online
ModuleDBEntitySchemaEnabled
- Modul Zobrazení DB Entitity Schema
ModuleDBEntitySchemaPath
- Cestana které se Schema Zobrazí, default: /DBEntitySchema
ModuleCSharpCodeBuilder
- Zapnout Online Správu Projektu Serveru a vývoj
ModuleHealthServicePath
-
Api URL cesta Serveru na které
bude Dohledové centrum k dispozici
ModuleSwaggerApiDocPath
-
Api URL cesta Serveru na které
bude API Dokumentace a Testovací rozhraní k dispozici
ModuleHealthServiceMessageOnChangeOnly
- Zaznamenávat Logování/zaslání zprávy pouze při změně z OK->FAIL, jinak bude zaznamenáno v každém cyklu
Server
ServerProviderModeEnabled
-
Enabling Provider APIs
More Informations are Published on WepPages
Are Published Core Informations With
Full Solutions Info/Tools/Codes/Etc Published
ServerCorsEnabled
- Server Filtrování Dle CORS Zapnuto
ServerCorsAllowAnyMethod
- CORS Hlavičky HTTP Requestů příchozích na server WEB + API ,Povolit jakoukoliv Metodu
ServerCorsAllowAnyHeader
- CORS Hlavičky HTTP Requestů příchozích na server WEB + API ,Povolit jakýkoliv Header
ServerCorsAllowCredentials
- CORS Hlavičky HTTP Requestů příchozích na server WEB + API ,Povolit jakékoliv Pověření - Autorizaci
ServerCorsAllowAnyOrigin
-
CORS Hlavičky HTTP Requestů příchozích
na server WEB + API,
Povolit jakýkoli původ
ServerPublicUrl
- Veřejná URL adresa serveru použita v modulech
BrowserLinkEnabled
- Okamžitý Rerresh při vytvoření změn na Webu, Pomůcka vývoje, Pozor muze delat problemy Je jednoduchy neni staveny na robustni systemy
DefaultStaticWebFilesFolder
- Root Složka pro Statické soubory Webu
Services
ServiceServerLanguage
-
Server Language for Translating Server internal statuses
Recommended: cz or en - other languages are not implemented
ServiceEnableMassEmail
- Zapíná/Vypína API pro Hromadné odesílání Emailů. Krásná Ukázka jak API může být Rozsáhlá serverová služba.
ServiceUseDbLocalAutoupdatedDials
-
Special Function: Using Selected Tables with AutoRefresh On change as Local DataSets,
For Optimize Traffic. For Example LanguageList - Static table with often reading
Recommended: true - functionality must be implemented in Server Code
ServiceCoreCheckerEmailSenderActive
-
Activation / Deactivation of Email Sender For Server Core Fails Checker All Catch Write
to SendEmail, In Debug mode is Written in console in Release mode is Sended email (All
incorrect server statuses are monitored) Can be writen to Database - !!! Warning for
infinite Cycling (DB shutdown example)
Recommended: true
SubServers
ServerFtpSecurityEnabled
- Zapíná/Vypíná Poninost Přihlašování. Vypnuto = 1 úložiště cotevřené pro R/W anonymní přístup. Zapnuto znamená že každý uživatel má svoji složku a je povinost přihlášení.
ModuleAutoSchedulerEnabled
-
Server Scheduler Module for Automatization Tasks
**ServerFtpEngineEnabled**The serve scheduler enabled.
-
Enable FTP File Server oppened for every connection with full rights
ServerDocsOldAutoRemoveEnabled
- Zapíná/Vypíná Automatické Odebírání Starých Verzí Dokumentace. Vztahuje se k Názvu, v Případě Změny Názvu je nutné Starou Verzi Odebrat manuálně
GitServerEnabled
- Zapíná Vypíná privátní Git Server
Web
RedirectOnPageNotFound
- Aktivuje Presmerovani na Zadanou cestu v případě Stránka nenalezena
RedirectPath
- Cesta na kterou se přesměruje Webová Stránka v případě 404 stránka nenalezena. Je také nastavena jako Výchozí Stránka
WebRazorPagesCompileOnRuntime
- Provádí kompilaci Za běhu Serveru. Tzn.. Podporuje Vkládání Stránek Externě
WebSitemapFileEnabled
- Generovaný Soubor Sitemap z Menu Portálu
WebRobotTxtFileEnabled
- zapnout zobrazení souboru Robot.txt , obsah se bere z nastavení Portálu
WebRSSFeedsEnabled
- Zapnout Generování RSS fédů; z položek, novinek
WebBrowserContentEnabled
- Enable WebPages File Browsing from server Url on Server
WebRazorPagesEngineEnabled
-
Enable Razor WebPages support engine with Correct Configuration for Automaping from
folder 'ServerCorePages'
WebMvcPagesEngineEnabled
- Enable Mvc WebPages support engine with Correct Configuration
WebLiveDataMonitorEnabled
-
Enable Server Static Folder Monitor for Data Changes
And immediatelly update all Api, Endpoints, Client Browser
WebSocket
WebSocketGlobalNotifyPath
-
WebPortal Global Notify Path on WebSocket for
sending messages from scheduler
**WebSocketServerMonitorEnabled**The web global socket notify path.
-
Server support online multi watch Logging
Its Run on Websocket and the Log Messages are
sent for All opened connections for wathing
on Path: ServerCoreMonitor
You can enable Mass Email Api
WebSocketEngineEnabled
- Enable WebSocket Engine with Default Example Api Controller
WebSocketTimeoutMin
-
WebSocket Timeout Connection Settings in Minutes. After timeout when not detected any
communication socket is closed Set according to your need
Recommended: 2
WebSocketMaxBufferSizeKb
- Určuje Maximální velikost WebSocket zprávy
Úvod EIC - Dokumentace Projektu
EasyITcenter Universální řešení serverů IT světa v 1 Globálním Balíčku Modulární Server s možností neomezeného a přesto extermně jednoduchého vývoje všemi směry Ideální Centrální Správa sítí, strojů, IT a všeho co si dovedete prtředstavit. Máte Otázky? neváhejte nám zavolat Do serveru lze zaimplementovat téměř neomezeně funkcionalit. Sám jich už má přehršel. Je tu ale nová Dynamická agenda kde se nastavují přístupy k zaimplementovaným modulům, nebo je možné tvořit vlastní webové moduly jako jednostánkové weby pro určitý Účel. ke snadnosti slouží knihovny kódů pomocí kterých tyto moduly můžete doslova Generovat
Seznam Implementovaných Modulů Serveru,
Do serveru lze zaimplementovat téměř neomezeně funkcionalit. Sám jich už má přehršel. Je tu ale nová Dynamická agenda kde se nastavují přístupy k zaimplementovaným modulům, nebo je možné tvořit vlastní webové moduly jako jednostánkové weby pro určitý Účel. ke snadnosti slouží knihovny kódů pomocí kterých tyto moduly můžete doslova Generovat
FullHtmlPage
GlobalLogin
Html/JS Modul Sloužící k ověření přihlášení a zápisu tokenu. JTímto způsobem se jedná o globální použití a může být použit pro každý nástoje, systém z jediného místa, takto si můžete postavit další systém, stvořený pouze z funkčních částí Je určen pro použití pro Stránky vyžadující Autorizaci Na základě přesměrování automaticky přesměruje na Login a Zpět
404NonExistPage
*Stránka, která se zobrazí při pokusu o otevření neexistující stránky !!! JE SYSTÉMOVÁ NEMĚNIT NÁZEV!!! Do Url a Funkce ve Scriptu zadejte Kam ná být dotyčný přesměrován Výchozí je: /ServerControls/404NonExistPage - API Systému směrující na název: 404NonExistPage a UrlSubPath: /DefaultWebPages/404NonExistPage *
401UnauthorizedPage
Stránka, která se zobrazí při neautorizovaném pokusu o otevření Autorizovaných stránek beuz vlastního přesměrování !!! JE SYSTÉMOVÁ NEMĚNIT NÁZEV!!! Do Url a Funkce ve Scriptu zadejte Kam ná být dotyčný přesměrován Výchozí je: /ServerControls/401UnauthorizedPage - API Systému směrující na název: 401UnauthorizedPage a UrlSubPath: /DefaultWebPages/401UnauthorizedPage
HtmlBodyOnly
DeveloperNews
*Modul Automaticky překládaná Stránka Novinek Pro Samostatné Zobrazení